问题描述
- c语言指针指向地址的问题 求大神详细解答
- #include
int main(int argc char const *argv[])
{int b=0x12345678;char *p4=(char *)&b;printf(""p=0x%hhxn""*p4 );printf(""p=0x%hhxn""*(p4+1) );char *p7=""helloworld"";printf(""%cn""*p7 );return 0;
}
为什么*p4打印的结果是ox78而*p7的结果是'h'而不是'd'?
解决方案
求大神给一下详细的解答和原理
解决方案二:
这个地方涉及到处理器大小端的问题,一般电脑都是小端的,也就是说高位保存到内存高地址,低位保存到低地址,此处*p4强制转换为char型,所以只取低字节,因为b在内存中保存方式自高字节到低字节依次保存到内存的高地址到低地址,所以此处的*(p4+1)则是56,依次类推*(p4+2)为34,*(p4+3)为12,
*p7此处定义的字符串,则p7代表该字符串的首地址,此处只打印一个字节,所以打印的是字符串的首字母
解决方案三:
你Debug下看到memory看一下内存布局,看看你的int b的数据是怎么存放的。
解决方案四:
你要记住两点,弄清楚一点。记住两点,第一点是字符串采用大端模式存储,第二点是指针始终指向变量的低地址,不是最地位。弄清楚一点是什么是大端存储,什么是小端存储。计算机一般采用小端模式存储非字符串变量。
解决方案五:
我也认为是机器的大端小端问题。
时间: 2025-01-26 04:28:00