繁体   English   中英

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

[英]passing an array of structs to a function and changing it through the fucntion

所以这是我的代码,但是由于某种原因它不会编译。

错误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定义应在使用前给出(或要求其大小)。
  • array[1]是一个pjs因此*array[1]是非法的(因为pjs没有operator*

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

array[1].size = 1;

然后将struct声明粘贴到函数之前。

如果要初始化整个数组,则需要将数组和大小传递给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. 
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM