将结构数组传递给函数c ++

时间:2010-08-31 21:18:46

标签: c++ arrays data-structures parameters

对于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?我正在使用视觉工作室 感谢。

5 个答案:

答案 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 ++有包装类来防止这种歧义