从不同函数使用的struct指针

时间:2013-11-18 19:35:07

标签: c pointers struct

我有以下代码:

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的方法。我是否必须创建指针指针?如果是,我应该在主要做吗?

1 个答案:

答案 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);