指针和引用
Pointers and Referencing
问题在这里。我试图创建一个内存图,我理解一切,直到b++,因为当代码被执行时,它改变val的值从10到4。原因是什么?
#include <iostream>
using namespace std;
void mem(int*& a, int* b){
a --;
b++;
a = new int[3];
a[0] = 3;
a[1] = *b;
a[2] = ++(*b);
}
int main()
{
int data[] = {2, 4, 6, 8};
int *ptrA = data;
for (int i = 0; i < 4; i ++){
(*ptrA)++;
ptrA++;
}
int val = 10;
mem(ptrA, &val);
}
在您的示例中,b
是指向整数的指针,而b++
要求指针以与ptrA++
相同的方式递增(即指向下一个可用的整数)。然而,不同之处在于ptrA
指向数组的开始;我们仍然拥有下一个可用整数的内存,所以一切都没问题。对于b
,它指向单个整数;增加它并尝试在之后使用它会导致未定义的行为。
b++;
正在将b
保存的地址增加到int
地址之后的一个int
。
在此之后,变量的任何使用都是未定义的,因为我们现在指向一些未指定的内存。
相关文章:
- C++取消引用指针.为什么会发生变化
- 深层复制具有自引用指针的类
- Visual c ++,使用字符串引用/指针调用 dll 函数
- std::unordered_map::提取引用/指针失效
- 为什么在引用指针时将 const 放在 & 符号的左侧有效,而在右侧则无效?
- 区分接受常量参数的函数引用/指针和与函数参数同名的非常量参数
- 如何在 c++ 中使用带有数学运算的引用/指针?
- 了解通过引用传递取消引用指针时C++堆/堆栈分配
- 取消引用指针并立即为其分配变量,导致分段错误
- 如何获取指向类(而不是对象)的引用/指针
- 将类型参数传递给自引用指针
- 我应该如何定义返回指针的函数?(引用指针与指针指针)
- 在析构函数内取消引用指针时出现分段错误
- 来自引用指针的内存泄漏
- 引用指针后面的值
- 无法取消引用指针
- 引用指针调用成员函数
- 未定义的引用指针的变量模板在clang中功能,而不是GCC
- 取消引用指针以创建数组的副本
- 有关启动引用指针的引用的问题