gpt4 book ai didi

c - 在C中通过引用传递指向结构的指针

转载 作者:行者123 更新时间:2023-12-01 08:16:47 26 4
gpt4 key购买 nike

请记住以下代码:

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

typedef struct
{
int a;
int b;
int c;
}A;

A *test;

void init(A* a)
{
a->a = 3;
a->b = 2;
a->c = 1;
}
int main()
{
test = malloc(sizeof(A));
init(test);
printf("%d\n", test->a);
return 0;
}

它运行良好!现在想象我想使用 malloc main 之外的函数本身而不返回指向 struct 的指针.我会把 malloc 放在里面 init并通过 test地址。但这似乎不起作用。
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
int a;
int b;
int c;
}A;

A *test;

void init(A** a)
{
*a = malloc(sizeof(A));
*a->a = 3;
*a->b = 2;
*a->c = 1;
}
int main()
{
init(&test);
printf("%d\n", test->a);
return 0;
}

它一直告诉我 int a (或 b/ c )不是 struct A 的成员当我使用指针时。

最佳答案

您的问题是运算符优先级。 ->运算符的优先级高于 * (取消引用)运算符,所以 *a->a读起来好像是*(a->a) .更改 *a->a(*a)->a :

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

typedef struct
{
int a;
int b;
int c;
}A;

A *test;

void init(A** a)
{
*a = malloc(sizeof(A));
(*a)->a = 3;
(*a)->b = 2;
(*a)->c = 1;
}
int main()
{
init(&test);
printf("%d\n", test->a);
return 0;
}

关于c - 在C中通过引用传递指向结构的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41686990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com