2 john tostr John_ToStr 于 2016.01.25 18:01 提问

求大神解答,关于内存解析以及类型转换的编译器底层实现,图中的结果请给我一个完整的解释,谢谢

#if 1
#include
using namespace std;

int main()
{
char str[] = "12345";
long pLong = (long)str;
pLong++;
printf("%d\n", pLong);
return 0;
}
#endif图片说明

2个回答

caozhy
caozhy   Ds   Rxr 2016.01.25 19:49
已采纳

这代码在我的编译器上没法编译

我修改了下

#include <stdio.h>

int main()
{
    char str[] = "12345";
    long *pLong = (long*)str;
    pLong++;
    printf("%d\n", (int)*pLong);
    return 0;
} 

结果是53。
内存是这样的(十进制)
49 50 51 52 53 0 0 0 0...
你pLong++,向后移动4字节。因为intel是小端处理器,所以是53

caozhy
caozhy   Ds   Rxr 2016.01.25 19:50

你要是输出指针,只知道它在堆栈上,但是这个就不好说了。

John_ToStr
John_ToStr 明白了,谢谢~
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片