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;
}