将结构数组传递给函数并通过函数更改它
passing an array of structs to a function and changing it through the fucntion
所以这是我的代码,但由于某种原因无法编译。
错误 3 错误 C2036:'pjs *':大小未知
错误 4 error C2100: 非法间接寻址
错误5 error C2037: left of 'size' specifies undefined 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);
}
那应该是
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;
并将结构声明剪切粘贴到函数之前。
如果要初始化整个数组,需要将数组和一个大小传递给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.
}
}
所以这是我的代码,但由于某种原因无法编译。
错误 3 错误 C2036:'pjs *':大小未知
错误 4 error C2100: 非法间接寻址
错误5 error C2037: left of 'size' specifies undefined 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);
}
那应该是
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;
并将结构声明剪切粘贴到函数之前。
如果要初始化整个数组,需要将数组和一个大小传递给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.
}
}