对于本周在CS类中的赋值,我们必须修改当前程序,为所有数组动态分配内存。我们必须确保没有内存浪费在空元素上。我们必须通过赋值字符数组到临时数组,检查temp的大小,然后分配那个大小的数组来做到这一点。
无论如何,我不知道怎么用结构来做。我知道如何动态分配内存,例如
int* pointer = new int(5);
但是我如何为结构成员做到这一点?看起来除非您预先定义大小,否则当您声明该类型的结构时,计算机将不知道要分配多少空间。
现在,我的结构定义是这样的:
struct card
{
char rank[10];
char suit[10];
char color;
bool dealt;
char location[12];
};
如何在不指定大小的情况下更改要动态声明的所有数组?
答案 0 :(得分:4)
struct card
{
char *rank;
char *suit;
char color;
bool dealt;
char *location;
};
只需在结构内部指针并动态分配内存,不要忘记在使用后释放它们。
答案 1 :(得分:3)
struct card
{
char* rank;
char* suit;
char color;
bool dealt;
char* location;
};
编译器不需要知道你要分配的大小,因为所有这个struct都会存储指向已分配内存的指针。
如果每个分配1个元素或者每个元素分配1000个元素,则指针的大小和结构将是相同的。
card c;
c.location = new char[10];
P.S。只是检查,你知道下面的代码分配了1个元素并将其设置为5,而不是分配5个元素吗?请参阅wikipedia了解两种用途之间的差异。
int* pointer = new int(5);
答案 2 :(得分:1)
使用char *排名?当你使用它时,card-> rank = malloc(sizeof(char)* size)?
答案 3 :(得分:-1)
在任何情况下,您都不需要更改结构变量,只需使用typedef更改调用它的方式:
typdef struct _CARD
{
char rank[10];
char suit[10];
char color;
bool dealt;
char location[12];
} CARD;
初始化CARD的使用数组:
CARD* card;
#define ARRSIZE 12
card = (CARD*)malloc(sizeof(CARD)*ARRSIZE);
对于更多动态结构分配,通过将struct本身作为指针来使用链表: typdef struct _CARD
typdef struct _CARD {
char rank[10];
char suit[10];
char color;
bool dealt;
char location[12];
struct _CARD *_next;
} CARD;
并根据需要初始化每个结构并使用_next指针绑定它们:
CARD *card,*tmp,*final,*first,*etc;
card = (CARD*)malloc(sizeof(CARD));
tmp= (CARD*)malloc(sizeof(CARD));
card->_next = tmp;
final = (CARD*)malloc(sizeof(CARD));
tmp->_next = final;
final->_next = NULL;
等等,您需要具有其他功能来管理动态创建的结构及其绑定。