我是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。
有人可以解释一下我该如何做到这一点,如果不能做到的话为什么。
谢谢
最佳答案
要更改函数中的对象(指针是对象),您需要通过引用将其传递给函数。
在 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 )
关于c - 是否可以修改函数内结构体指针的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70175909/