Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更改数组值的指针算法_C++ - Fatal编程技术网

C++ 更改数组值的指针算法

C++ 更改数组值的指针算法,c++,C++,这是前一个问题的后续问题 我已经学会了一些错误的方式,但有额外的问题。我的目标是在不使用任何全局变量的情况下,将一个方法中的局部数组与另一个方法中的局部数组进行更改 void methodOne(){ int myArray[10] = {0}; int *pMyArray = myArray; methodTwo(&*pMyArray); } 这应该是声明一个空值数组,并传递对第二个数组的引用,正如我所看到的那样 接

这是前一个问题的后续问题

我已经学会了一些错误的方式,但有额外的问题。我的目标是在不使用任何全局变量的情况下,将一个方法中的局部数组与另一个方法中的局部数组进行更改

void methodOne(){

        int myArray[10] = {0};
        int *pMyArray = myArray;
        
        methodTwo(&*pMyArray);
}
这应该是声明一个空值数组,并传递对第二个数组的引用,正如我所看到的那样

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

*localPointer  = 1;
这是正确的吗

然后,要更改下一个元素,我将使用以下命令递增指针:

localPoint++;
*localPointer = 2;
这会改变myArray中的第二个值吗?我不确定那是正确的方法,是吗


TIA

是的,这一切看起来都应该奏效。通常,当您将数组传递给函数时,您不需要首先赋给局部变量——只需将数组的名称作为参数传递:
methoTwo(myArray)。编译器将自动将数组的名称转换为指向数组开头的指针

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

localpointer[0] = 1;
localpointer[1] = 2;
…也是合理的,并将实现与您的

*localpointer = 1;
++localpointer;
*localpointer = 2;
值得一提的是,另一种选择是:

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

首先,错误地传递数组。数组只不过是指向第一个元素的指针,因此不需要获取它的地址就可以将其传递给
MethodTwo
。但是,您应该做的是将该数组中的元素数传递给
methodtwo

 methodTwo(MyArray, 10);
由于数组只不过是指向第一个元素的指针,因此可以直接索引到数组中,而无需使用指针算术:

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

  passedArray[0] =  passedPointer;

}

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

尝试时发生了什么?只需使用
localPointer[i]
访问即可。我从来不知道可以使用带有数组表示法的指针。这就容易多了。Ty.@EricBanderhide:Yup--C表示
*(指针+偏移量)
等同于
指针[偏移量]
void methodTwo(int passedArray[], size_t n)
// alternative void methodTwo(int *passedArray, size_t n)
{

  passedArray[0] =  passedPointer;

}