首页 > 解决方案 > 如何将指针传递给另一个函数中的结构数组

问题描述

我正在尝试将指向结构数组的指针传递给另一个函数

#include<stdio.h>
#include<string.h>

typedef struct CovidData{
  char region[7];
  char towns[12];
  char race[12];
  int yearlyIncome;
  int members;
  int testedMembers;
  int testedPositive;
} CovidData;


void RandomDataGenerator(CovidData *data[] ,int count)
{
    for(int i=0;i<count;i++){    
          memcpy(data[i]->region,"david",sizeof("david"));
          memcpy(data[i]->towns,"david",sizeof("david"));
          memcpy(data[i]->race,"david",sizeof("david"));
          data[i]->yearlyIncome=1000;
          data[i]->members=99;
          data[i]->testedMembers=88;
          data[i]->testedPositive=656;
    } 
}

int main() {
    struct CovidData data[100];    

    RandomDataGenerator(&data,2);
    for(int i=0;i<5;i++){    
        printf("%s",data[i].region);    
    }    
}

但是在终端中使用 gcc 编译时会引发错误

incompatible pointer types passing 'CovidData (*)[100]' to 
parameter of type 'CovidData

标签: c

解决方案


CovidData *data[]被分组为CovidData *(data[]),因此它声明了一个指向 的指针数组CovidData。对于指向数组的指针,您可以使用CovidData (*data)[].

但是,我们很少将指针传递给数组。通常,仅将指针传递给第一个元素就足够且方便。因此,您可以将参数声明为CovidData *data并将其作为RandomDataGenerator(data, 2).

如果您确实将参数声明为指向数组的指针,则不会将其与data[i]->region. 您需要*data在应用下标之前获取数组,并且再次需要括号来正确分组:(*data)[i]->region


推荐阅读