做一个小的指针类的题,发现以前对栈的理解是错误的。
栈的地址是从小到大分配,如:
char c[] = { 3, 3, 3, 3 };
c[0]的地址为0x012ff8ca
c[1]的地址为0x012ff8cb
c[2]的地址为0x012ff8cc 等等
然后执行以下代码段(2)
int* i = (int*)&c;
cout << *i;
计算机中*i的原码为00000011 00000011 00000011 00000011
输出的值为50529027
然后我改变数组c的值
char c[] = { 3, 3, 3, 0 };
本来以为此时*i的原码会变为00000011 00000011 00000011 00000000
即*i的值为50529024
然而却发现得到的值为197379
原码会变为00000000 00000011 00000011 00000011
也就是说虽然i指向的地址为c的首地址,也就是地址最小值,但是它的值是反过来的,以最低位放最高位的二进制。