【问题标题】:Passing address of structure to a function将结构地址传递给函数
【发布时间】:2015-08-26 10:03:27
【问题描述】:

我在 main() 中声明了一个结构。我想将结构的地址传递给函数。它显示结构未声明错误。我知道如果在 main() 中声明了一个结构,它的范围是有限的。但是在这里,我将地址传递给函数。它仍然显示银行 * 未知大小的错误。我应该怎么做才能传递在 main 中声明的结构地址?这是我的代码:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

void edit_data(struct bank *acc_data)

{
    int loop;
    for(loop=0;loop<200;loop++) 
    {
       *(acc_data+loop).acc_no = 1000+loop;
        (acc_data+loop).name = "a1";
        (acc_data+loop)->balance = 1000;
    }
};

int main()
{
    int loop;

    struct bank
    {

        long acc_no;

        char name[80];

        int balance;

    }data[200];

    edit_data(data);
}

【问题讨论】:

    标签: c function structure


    【解决方案1】:

    您正在混合变量的声明和变量类型的声明。 您的函数应该知道类型,并且该类型当前已在程序的主要部分中声明。要解决它,请在全局空间中声明类型:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct bank
    {
        long acc_no;
        char name[80];
        int balance;
    };
    
    void edit_data(struct bank *acc_data)
    {
      int loop;
      for(loop=0;loop<200;loop++)
      {
          (acc_data+loop)->acc_no = 1000+loop;
          strcpy( &(acc_data+loop)->name , "a1");
          (acc_data+loop)->balance = 1000;
      }
    };
    int main()
    {
       int loop;
       struct bank data[200];
       edit_data(data);
    }
    

    请注意,您的编辑数据函数中还有一些指针错误......

    在这种情况下,通常使用数组而不是指针会更好:

    void edit_data(struct bank *acc_data)
    {
      int loop;
      for(loop=0;loop<200;loop++)
      {
          acc_data[loop].acc_no = 1000+loop;
          strcpy( acc_data[loop].name , "a1");
          acc_data[loop].balance = 1000;
      }
    };
    

    【讨论】:

      猜你喜欢
      • 2021-05-03
      • 2012-05-09
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多