【问题标题】:passing an array of structs to a function and changing it through the fucntion将结构数组传递给函数并通过函数更改它
【发布时间】:2015-08-16 14:27:51
【问题描述】:

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

错误 3 错误 C2036: 'pjs *' : 未知大小 错误 4 错误 C2100:非法间接
错误 5 error C2037: left of 'size' 指定未定义的 struct/union '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);
}

【问题讨论】:

  • 在 C 中,在使用之前必须知道对象定义。建议将结构定义放在第一次使用的位置之前,而不是第一次使用的位置之后。

标签: c++ c arrays function struct


【解决方案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*

【讨论】:

  • 声明/类型定义之前实际上是需要的,而不仅仅是“应该”暗示的建议。
  • 非常这就是问题所在! @Jarod42
【解决方案2】:

应该是这样的

array[1].size = 1;

【讨论】:

    【解决方案3】:

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

    array[1].size = 1;
    

    并将结构声明剪切粘贴到函数之前。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-21
        • 2015-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-06
        相关资源
        最近更新 更多