用于更改数组值的指针算术
Pointer arithmetic to change array values
这是对前一个问题的后续问题。
我学到了一些错误,但有额外的问题。我的目标是在不使用任何全局变量的情况下,将一种方法中的局部数组从另一种方法更改。
void methodOne(){
int myArray[10] = {0};
int *pMyArray = myArray;
methodTwo(&*pMyArray);
}
这应该是声明一个 null 值数组并将引用传递给第二个数组,正如我在这里看到如何正确执行此操作一样。
void methodTwo(int *passedPointer){
int *localPointer = passedPointer;
}
接下来,我想从methodTwo更改myArray的值。因此,要更改第一个[0]
元素,我会说:
*localPointer = 1;
这是对的吗?
然后要更改下一个元素,我将使用以下方法递增指针:
localPoint++;
*localPointer = 2;
这会改变 myArray 中的第二个值吗?我不确定这是正确的方法吗?
蒂亚
是的,这一切看起来都应该有效。通常,当您将数组传递给函数时,您不会先分配给局部变量 - 您只需将数组的名称作为参数传递:methoTwo(myArray);
。编译器会自动将数组的名称转换为指向数组开头的指针。
另请注意,您可以在接收端使用数组样式表示法,例如:
localpointer[0] = 1;
localpointer[1] = 2;
。也是合理的,并且会完成与您的
相同*localpointer = 1;
++localpointer;
*localpointer = 2;
对于它的价值,另一种选择是:
*localpointer++ = 1;
*localpointer = 2;
首先,您错误地传递了数组。数组只不过是指向第一个元素的指针,因此您无需获取其地址即可将其传递给MethodTwo
。但是,您应该做的是将该数组中的元素数传递给MehtodTwo
:
methodTwo(MyArray, 10);
由于数组只不过是指向第一个元素的指针,因此您可以直接索引到数组中,而无需使用指针算法:
void methodTwo(int passedArray[], size_t n)
// alternative void methodTwo(int *passedArray, size_t n)
{
passedArray[0] = passedPointer;
}
不,这是错误的。大错特错。数组到指针的衰减非常非常糟糕,你永远不应该使用它。使用基于类的包装器(如 std::array
),并将一对迭代器传递给 MethodTwo。
相关文章:
- 指向指向字符数组的指针数组的指针
- 通过指向指针数组的指针访问子类的属性
- C++,指针数组,指向双链表中的条目
- 在C++中,如何初始化指向wchar_t*的指针数组(生成wchar_t**)
- C++从函数指针数组调用函数
- 关于指向指针数组的指针
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 将链表转换为指针数组时出错
- C++ 对象指针数组的复制构造函数
- C++ - 循环访问指针数组会导致错误
- 删除指针数组 (C++) 中的元素
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将函数指针数组中的函数指针作为模板参数传递
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 具有推导参数的模板函数指针数组变量
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- C++指针数组到字符数组中的特定位置
- 如何在C++中复制指针数组的数据
- 初始化类中的指针数组,并在另一个类中检索它
- 尽管直接设置了指针数组,但仍为空