来自Stroustrup - 编程:使用 C++ 的原则和实践一书。在§17.3中,关于内存、地址和指针,应该允许将 a 分配char*给int*:
char ch1 = 'a';
char ch2 = 'b';
char ch3 = 'c';
char ch4 = 'd';
int* pi = &ch3; // point to ch3, a char-size piece of memory
*pi = 12345; // write to an int-size piece of memory
*pi = 67890;
从图形上看,我们有这样的东西:
引用来源:
如果编译器允许该代码,我们就会
12345从&ch3. 那肯定会改变附近一些内存的值,例如ch2orch4,或者我们会覆盖pi它自己的一部分。
在这种情况下,下一个分配
*pi = 67890将放在67890内存的某个完全不同的部分。
我不明白,为什么下一个作业会把它放在内存的某个完全不同的部分?存储在中的地址int *pi仍然是&ch3,因此分配将覆盖该地址处的内容,即12345。为什么不是这样?
拜托,你能帮帮我吗?非常感谢!
