【发布时间】:2010-12-21 07:56:09
【问题描述】:
typedef struct unit_class_struct {
char *name;
} person;
person * setName() {
person * array;
array = malloc (2 * sizeof(person));
array->name = strdup("Robert");
array++;
array->name = strdup("Jose");
return array;
}
int main()
{
person *array;
array = setName();
printf("First name is %s\n", array[0].name);
printf("Second name is %s\n", array[1].name);
return 0;
}
在此示例中,array[0].name 返回 Jose,而不是我预期的 Robert,并且 array[1].name 为空。
但是如果我使用
person * setName() {
person * array;
person * array_switch;
array = malloc (2 * sizeof(person));
array_switch = array;
array_switch->name = strdup("Robert");
array_switch++;
array_switch->name = strdup("Jose");
return array;
}
它按预期工作。 array.name[0] 返回 Robert,array.name[1] 返回 Jose。
为什么这个例子需要第二个指针才能工作?我可以在不使用第二个指针的情况下仍然使用指针算术吗?
我已经知道这也是另一种方法:
person * setName() {
person * array;
array = malloc (2 * sizeof(person));
array[0].name = strdup("Robert");
array[1].name = strdup("Jose");
return array;
}
【问题讨论】:
-
再次按
array[1].name之类的索引访问元素有什么问题? -
没什么,我只是已经知道怎么做,我正在努力了解如何用指针算术来做
标签: c arrays data-structures pointers return