使用带有指针的const可以通过使用有问题的指针解除引用而使得指针不可修改.但为什么我也不能修改指针没有直接指向的东西?
例如:
int a = 3;
const int* ptr = &a;
*ptr = 5;
Run Code Online (Sandbox Code Playgroud)
不会编译.但为什么呢
*(ptr + 2) = 5;
Run Code Online (Sandbox Code Playgroud)
还没编译?我没有改变指针指向的内容.
所以我们不得不说使用带有指针的const这样不仅使得指针指向的内容不可修改(通过解引用指针)而且还有其他任何东西,我们使用指针获取地址吗?
我知道在示例中我试图访问未分配的内存,但这只是为了讨论.
我无法理解文本段中存储的内容。到目前为止我发现它包含我的程序的可执行代码(0 和 1)。但是程序的整个内存不都包含可执行代码(即用0和1编写的)吗?我的意思是,程序首先被编译,然后组装,最后链接,因此,一旦我们运行它,它都是二进制的。因此,一旦程序运行,就会在堆栈中为当前正在执行的函数创建堆栈帧,并且在这些堆栈帧中所有变量都为 0 和 1,但是文本段内有什么?
这个问题可能听起来微不足道但是,我知道每当一个函数开始执行时,堆栈中就会为函数的所有局部变量等创建堆栈帧,但是我无法理解当for循环开始执行或者内部的代码时会发生什么.如果条件开始执行.将它们视为在函数的堆栈框架内执行似乎是不合理的,因为它们有自己的范围,因此它们有自己的局部变量.但是,它们可以访问它们上面的函数的变量,因此这似乎意味着它们位于函数的堆栈框架内.
所以有人可以为我清楚这一点吗?
它们在被执行时实际位于内存中的哪个位置?
同样的问题出现在结构上,它们有自己的范围,它们不是指针,而只是更大的"盒子",包含整数,字符*等.