c++中指针问题一个很好的例子

#include <iostream> 
using namespace std;
int main(){
    int a[2]={261,0};
    int *pi=a;
    char *p=(char *)pi;
    cout<<*(int*)p++<<endl;
    cout<<*(int*)p<<endl;
    cout<<(int)*p<<endl;
    cout<<(int)*(char*)pi<<endl;    
    return 0;
}

输出为:

261
1
1
5

这个问题首先你要了解计算机的内存机制,计算机内存一般是按字节存储的(至少我们现在用的pc机都是这样),我们分析的时候经常数字转化为16进制进行分析,因为一位16进制正好是4bit,两位16进制就是一字节,261转化为16进制之后是105,如下:

这里写图片描述

这里写图片描述
然后它在内存中的存储如果按照大端存储,就是下图这样的,我们用的pc机大多是按照大端存储的,就是低字节存在内存的低地址,小端存储相反,不清楚的话自己百度一下:
这里写图片描述
这里写图片描述

cout<<(int)p++<

猜你喜欢

转载自blog.csdn.net/q1183345443/article/details/80082261