我试图在c中创建一个简单的扑克游戏,并且很难使用循环将我的卡片结构放入数组中,这样我就不必单独创建每个卡片对象,然后将它们逐个手动放入数组中。我对java比较熟悉,知道我可以使用“new className(class parameters)”方法在数组中输入新对象,而不需要逐个命名和初始化它们。这是我在java中要做的基本工作,我想知道是否有一种方法可以使用c来做到这一点。
for(int i = 0; i < 14; i++){
table_deck.deck[i] = new card("diamonds", i);
}
字符串
[In这个链接是我迄今为止使用c](https://i.stack.imgur.com/B8tkC.png)所尝试的
我试着做所附的照片,但不会通过编译。我希望有一些方法让我这样做,而不是手动初始化52卡单独和他们插入他们内我的阵列52单独。
2条答案
按热度按时间2cmtqfgy1#
C不像Java那样有类。最接近的替代品是可以存储成员的
struct
。Javanew
所做的是为类的新示例分配内存。C中最接近的等价物是使用malloc()
并分配字段:字符串
或者只是声明/使用堆栈变量:
型
如果你喜欢传递参数给函数的想法:
型
vojdkbi02#
这段代码似乎想给数组元素赋值一个结构体值:
字符串
上面的代码在C中是不法律的的,但是你可以使用 compound literal 来完成这一点:
型
一个复合文本创建一个未命名的对象,如果它出现在任何函数之外,该对象具有静态存储期限。否则,未命名对象具有自动存储持续时间,该持续时间在出现复合文字的块退出时结束。
必须小心使用复合文字创建的对象的生存期。由于上面的代码在
main
中使用了复合文字,因此您可以使用table_deck.deck
作为参数从main
调用其他函数,并且与各个card
结构体相关联的存储将是有效的。一旦main
退出,该存储将不再有效。这里使用复合文字只是为了方便。另一种避免复合文字对象存储持续时间的细微差别的方法是简单地直接分配给相关字段。您可以修改
card
结构体的suit
字段,以接受指向char
的指针,或者更好地接受指向const char
的指针。然后一个字符串字面量(在静态内存中衰减为指向char
的指针)可以分配给指针:型
如果您选择尝试这样的解决方案,则必须确保您试图复制到
suit
字段中的任何字符串都适合(包括\0
终止符)。您可能希望使用strncpy
,但这会带来它自己的问题,因为strncpy
可以在没有null终止的情况下离开它的目标数组。或者你可以保持
card
结构体原样,并将字符复制到suit
字段中:型