通过引用修改结构与其他指针之间的区别

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)

我只是好奇为什么我不需要对结构的指针设置做同样的指针,以便通过引用进行修改?

Paw*_*iak 8

在ChangeCharName的第一个版本中,您只修改了函数本地指针的副本.name1的原始值保持不变.通过引用传递指针(在函数的第二个版本中)允许您更改指针的原始值(由main()看到).