【发布时间】:2012-12-27 15:39:14
【问题描述】:
目前,我尝试理解 C 中的动态数组。
当我为指针“ptr”分配内存时,它可以在不输入我需要的元素数量(在 malloc 函数中)的情况下工作。
现在,问题是,不明白它为什么起作用。
如果有人能给我一些建议,那就太好了。
谢谢。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct daten
{
char name[20];
int alter;
};
int main(void)
{
struct daten *ptr;
int i;
ptr = malloc(sizeof(struct daten *)); //works fine!!
//ptr = malloc(sizeof(struct daten *)*4);
strcpy(ptr[0].name, "Daniel");
ptr[0].alter = 23;
strcpy(ptr[1].name, "Fabian");
ptr[1].alter = 29;
strcpy(ptr[2].name, "Helmut");
ptr[2].alter = 34;
strcpy(ptr[3].name, "Katrin");
ptr[3].alter = 21;
for(i = 0; i<4; i++)
{
printf("%s\t", ptr[i].name);
printf("%d\n", ptr[i].alter);
}
return 0;
}
【问题讨论】:
-
请更改
sizeof(struct daten *)->sizeof(struct daten)。你想存储一个对象,而不是一个指向对象的指针。 -
@KarthikT 而不是
sizeof(*ptr)。 -
@H2CO3 啊是的,有点干净。
-
@KarthikT 并不是说它更干净,但是当
ptr变为struct daten *以外的任何内容并且您忘记在malloc()调用中更改类型时,sizeof(struct daten)会中断。 -
@H2CO3 是的,我的意思是这样,因为减少了逻辑重复,正如您所指出的那样,更改代码更容易。
标签: c arrays pointers dynamic malloc