C++ 将结构数组传递给函数并通过函数对其进行更改

C++ 将结构数组传递给函数并通过函数对其进行更改,c++,c,arrays,function,struct,C++,C,Arrays,Function,Struct,这是我的代码,但由于某些原因它无法编译 错误3错误C2036:“pjs*”:未知大小 错误4错误C2100:非法间接寻址 错误5错误C2037:“大小”左侧指定未定义的结构/联合“pjs” void initArray(struct pjs* array) { (*array[1]).size = 1; } struct pjs{ char* name; int size; int price; }; int main(int argc , char** argv) {

这是我的代码,但由于某些原因它无法编译

错误3错误C2036:“pjs*”:未知大小 错误4错误C2100:非法间接寻址
错误5错误C2037:“大小”左侧指定未定义的结构/联合“pjs”

void initArray(struct pjs* array)
{

    (*array[1]).size = 1;
}
struct pjs{
 char* name;
 int size;
 int price;
};
int main(int argc , char** argv)
{
    struct pjs array[10];
    initArray(array);
    system("PAUSE");
    return (0);
}
这应该很简单

array[1].size = 1;
以下可能会有所帮助:

struct pjs{
    char* name;
    int size;
    int price;
};

// safer to use one of the following declaration
// void initArray(pjs *array, std::size_t size) // simpler
// void initArray(pjs (&array)[10]) // more restrictive but unintuitive syntax
void initArray(pjs* array)
{
    array[1].size = 1;
}

int main()
{
    pjs array[10];
    initArray(array);
}
  • 在使用pjs(或要求其尺寸)之前,应给出pjs的定义
  • array[1]
    是一个
    pjs
    所以
    *array[1]
    是非法的(因为
    pjs
    没有
    操作符*

将initArray的第一条语句更正为:

array[1].size = 1;

然后将结构声明剪切粘贴到函数前面。

如果要初始化整个数组,需要将数组和大小传递给
initArray

int main(int argc , char** argv)
{
    struct pjs array[10];
    initArray(array, sizeof(array)/sizeof(array[0]));
    system("PAUSE");
    return (0);
}
然后,将数组中的每个对象初始化为:

void initArray(struct pjs* array, size_t size)
{
   for (size_t i = 0; i < size; ++i )
   {
      array[i].size = 1;
      array[i].price = 0; // Or whatever makes sense
      array[i].name = malloc(1); // Or whatever makes sense. 
   }
}
void initArray(结构pjs*数组,大小)
{
对于(大小i=0;i
实际上需要在使用之前进行声明/类型定义,而不仅仅是“应该”所暗示的建议。这就是问题所在@在JAROD42C中,对象定义在使用之前必须是已知的。建议将结构定义放在第一次使用它的位置之前,而不是放在第一次使用它的位置之后。