0

这是对先前问题的后续问题。

我从自己的方式中学到了一些错误,但还有其他问题。我的目标是在不使用任何全局变量的情况下将一种方法中的局部数组从另一种方法更改。

void methodOne(){

        int myArray[10] = {0};
        int *pMyArray = myArray;
        
        methodTwo(&*pMyArray);
}

这应该是声明一个空值数组并传递对第二个数组的引用,因为我在这里展示了如何正确执行操作。

void methodTwo(int *passedPointer){
       
        int *localPointer =  passedPointer;

}

接下来我想从 methodTwo 更改 myArray 的值。因此,要更改第一个[0]元素,我会说:

*localPointer  = 1;

它是否正确?

然后要更改下一个元素,我会使用以下方法增加指针:

localPoint++;
*localPointer = 2;

这会改变 myArray 中的第二个值吗?我不确定那是正确的方法吗?

TIA

4

3 回答 3

1

是的,这一切看起来应该可以工作。通常,当您将数组传递给函数时,您不会首先分配给局部变量 - 您只需将数组的名称作为参数传递:methoTwo(myArray);. 编译器会自动将数组名转换为指向数组开头的指针。

另请注意,您可以在接收端使用数组样式表示法,例如:

localpointer[0] = 1;
localpointer[1] = 2;

...也是合理的,将完成与您的相同的

*localpointer = 1;
++localpointer;
*localpointer = 2;

对于它的价值,另一种选择是:

*localpointer++ = 1;
*localpointer = 2;
于 2012-04-23T16:24:16.907 回答
0

首先,您错误地传递了数组。数组只不过是指向第一个元素的指针,因此您无需将其地址传递给MethodTwo. 但是,您应该做的是将该数组中的元素数传递给MehtodTwo

 methodTwo(MyArray, 10);

由于数组只不过是指向第一个元素的指针,因此您可以直接索引到数组而无需使用指针算法:

void methodTwo(int passedArray[], size_t n)
// alternative void methodTwo(int *passedArray, size_t n)
{

  passedArray[0] =  passedPointer;

}
于 2012-04-23T16:26:08.843 回答
0

不,这是错误的。非常错误。数组到指针衰减真的非常糟糕,你永远不应该使用它。使用基于类的包装器,如std::array,并将一对迭代器传递给 MethodTwo。

于 2012-04-23T16:30:38.943 回答