对于noob问题我很抱歉,我只是有点困惑 如果我在main中有一个我希望传递给函数的结构数组:
struct MyStruct{
int a;
int b;
char c;
mayarray[5];
};
MyStruct StructArray[10];
myFunction(StructArray[])
传递给函数:
void myFunction(struct MyStruct PassedStruct[])
{
PassedStruct[0].a = 1;
PassedStruct[0].b = 2;
// ... etc
}
我的问题是,调用这样的函数会修改StructArray
中的数据吗?我需要它。这可以通过参考来打电话吗?我有点困惑。我如何更改它,以便当我将结构数组传递给函数时,该函数将修改数组StructArray
?我正在使用视觉工作室
感谢。
答案 0 :(得分:24)
答案 1 :(得分:8)
虽然数组和指针在概念上是不同的东西,但水域却被功能参数弄得很混乱。您无法直接将数组传递给函数;你只能传递一个指针。结果,语言“帮助”转换原型,如:
void foo (char arr[])
进入这个:
void foo (char *arr)
当你调用函数时,你没有传递一个完整的数组,你将指针传递给第一个元素。因此,在函数foo
内部,它将具有指向原始数组的指针,并且分配给arr
的元素也将更改调用者中的数组。
在所有函数参数之外的其他情况下,声明中的数组和指针语法不等效,并且在概念上引用不同的东西。但是在函数参数列表中,数组语法会创建指针类型。
答案 2 :(得分:1)
我相信x []意味着与x *相同的东西,意思是“指向类型的指针”。既然如此,您将修改您传递的对象(您需要使用&或'address of'运算符来调用它),您可以将其视为参考。
答案 3 :(得分:1)
当您将数组作为参数传递给函数时,数组会衰减为指向数组第一个元素的指针。
因此,当您在函数内部使用[]访问数组的元素时,您实际上只使用初始指针进行指针算术来获取ORIGINAL数组的元素。
所以,是的,你正在修改原始数组。这个答案几乎与您使用的编译器无关(虽然这是一个很好的做法,恕我直言,在问题中陈述编译器就像你一样)
答案 4 :(得分:1)
您可以使用std :: vector代替。数组是非常多的C构造,C ++有包装类来防止这种歧义