是否可以在函数内修改结构指针的内容?

Is it possible to modify the content of a struct pointer inside a function?

我是 C 初学者,我试图创建一个修改结构指针内容的函数,但它无法实现,相反,内容保持不变。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
  int age;
  int code;
}person;

void enter(person *struct_pointer);

void main(void)
{
  person *person_1 = NULL;

  enter(person_1);
  printf("CODE: %i\n", person_1->code);
  free(person_1);
}

void enter(person *struct_pointer)
{
 struct_pointer = malloc(sizeof(*struct_pointer));
 struct_pointer->age = 10;
 struct_pointer->code = 5090;
}

在上面的例子中,当我打印 person_1 的代码时,它什么也没有打印,所以我假设是因为 person_1 仍然指向 NULL。

谁能解释一下我该怎么做,如果做不到为什么。

谢谢

您可以修改结构的内容。它对您不起作用,因为您是在 enter 函数中创建一个新结构而不是编辑原始结构。只需删除第一行(带有 malloc 的行),而是在 person_1 变量的声明中分配结构。

要更改函数中的对象(指针是对象),您需要通过引用将其传递给函数。

在 C 中,按引用传递意味着通过指向对象的指针间接传递对象。因此取消引用指针函数可以直接访问原始对象。

因此您的函数应该按以下方式声明和定义

void enter(person **struct_pointer)
{
    *struct_pointer = malloc(sizeof(**struct_pointer));
    if ( *struct_pointer )
    {
        ( *struct_pointer )->age = 10;
        ( *struct_pointer )->code = 5090;
    }
}

并称赞

enter( &person_1 );

否则在这个函数声明的情况下

void enter(person *struct_pointer);

函数将处理传递指针值的副本,在函数内更改副本不会影响原始指针。

注意根据C标准,不带参数的函数main应该声明为

int main( void )