ZPS*_*ZPS 1 c pointers arguments reference data-structures
我想知道为什么结构指针的行为与char指针的行为不同.
typedef struct person_struct {
char *name;
} person;
changeStructName(person * name1)
{
name1->name = "Robert";
}
changeCharName(char * name2)
{
name2 = "Jose";
}
int main()
{
person * name1;
char * name2;
name1 = malloc(1 * sizeof(person));
changeStructName(name1);
changeCharName(name2);
printf("First name is %s\n",name1->name);
printf("Second name is %s\n",name2);
}
Run Code Online (Sandbox Code Playgroud)
我知道使用此代码将起作用:
changeCharName(char ** name2)
{
*name2 = "Jose";
}
changeCharName(&name2);
Run Code Online (Sandbox Code Playgroud)
我只是好奇为什么我不需要对结构的指针设置做同样的指针,以便通过引用进行修改?
在ChangeCharName的第一个版本中,您只修改了函数本地指针的副本.name1的原始值保持不变.通过引用传递指针(在函数的第二个版本中)允许您更改指针的原始值(由main()看到).