принять в виду следующий фрагмент кода:указатель на структуру Pass по ссылке в C
#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
, когда я использую указатель.
Держу пари, это не то, что он говорит вам. Каково фактическое сообщение об ошибке? – melpomene
@melpomene запрос для члена 'a' в чем-то не структуре или союзе – Primemaster
См.? Он даже не упоминает 'struct A'. В нем говорится, что вещь, которую вы пытаетесь использовать, вовсе не является «структурой». (Как объясняются ниже, ваш код обрабатывается как '* (a-> a)', 'a-> a' - это то же самое, что и' (* a) .a', а тип '* a' это 'A *', т. е. компилятор думает, что вы пытаетесь получить доступ к элементам указателя, что не имеет смысла.) – melpomene