【问题标题】:struct pointer used from different functions不同函数使用的结构指针
【发布时间】:2023-04-02 12:01:02
【问题描述】:

我有以下代码:

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:在函数“测试”中: std.c:25:3:警告:从不兼容的指针类型传递“test2”的参数 1 [默认启用] std.c:11:6:注意:预期为“struct data ”,但参数的类型为“struct data *

我找不到在 test2() 中使用 struct 的方法。我必须创建一个指向指针的指针吗?如果是,我应该在 main 中执行吗?

【问题讨论】:

    标签: c pointers struct


    【解决方案1】:

    函数test 中的语句test2(&my_data); 导致了问题。从中删除&

    test2(my_data);   
    

    还将&my_data.a&my_data.b 转换为void *

     printf( "%p %p ", (void *)&my_data.a, (void *)&my_data.b);
    

    【讨论】:

    • 非常感谢。但为什么会这样?这是一个指向结构的指针,我在 main 中使用,我也在 test2 中使用。为什么这是错误的?
    • main 中,您将my_data 声明为struct data 类型,但在您的两个函数中,您将my_data 声明为指向struct data 类型的指针,因此无需附加my_data & 在你的函数中 test2
    猜你喜欢
    • 2012-08-03
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多