请注意以下代码:
#include#include 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#include 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
)不是in的成员struct A
。
您必须添加括号:
void init(A **a) { *a = malloc(sizeof(A)); // bad you don't verify the return of malloc (*a)->a = 3; (*a)->b = 2; (*a)->c = 1; }
但这是一个好习惯:
void init(A **a) { A *ret = malloc(sizeof *ret); // we want the size that is referenced by ret if (ret != NULL) { // you should check the return of malloc ret->a = 3; ret->b = 2; ret->c = 1; } *a = ret; }