我有以下代码:
struct data
{
int a;
int b;
};
void test2(struct data *my_data)
{
(*my_data).a=3;
(*my_data).b=4;
printf("%d %d\n", (*my_data).a, (*my_data).b);
}
void test(struct data *my_data)
{
(*my_data).a=1;
(*my_data).b=2;
test2(&my_data);
}
int main(void)
{
struct data my_data;
struct data *ptr;
ptr = &my_data;
my_data.a=0;
my_data.b=0;
printf( "%p %p ",&my_data.a, &my_data.b);
printf("%d %d\n", my_data.a, my_data.b);
test(ptr);
printf( "%p %p ",&my_data.a, &my_data.b);
printf("%d %d\n", my_data.a, my_data.b);
return 0;
}
我无法找到一种方法来阻止gcc向我显示以下内容:
std.c:在函数'test'中: std.c:25:3:警告:从不兼容的指针类型[默认启用]传递'test2'的参数1 std.c:11:6:注意:预期'struct data '但参数类型为'struct data * '
我找不到在test2()中使用struct的方法。我是否必须创建指针指针?如果是,我应该在主要做吗?
答案 0 :(得分:2)
函数test2(&my_data);
中的语句test
导致了问题。从中删除&
。
test2(my_data);
还将&my_data.a
和&my_data.b
投射到void *
。
printf( "%p %p ", (void *)&my_data.a, (void *)&my_data.b);