一道简单的问题
本帖最后由 风之残月 于 2014-11-10 10:20 编辑#include<stdio.h>
main()
{
char *p="jklmnopqrstuvwxy";
int*t=(int *)p;
t=t+1;
printf("%x\n",*(t+1));
}结果为什么是75747372而不是 72737475
j是0x6a 本帖最后由 oggplay 于 2014-7-5 21:25 编辑
luckin 发表于 2014-7-4 18:42
小端机,按整形读出来的值应该是 0x75747372
小端机,按整形读出来的值应该是 0x72737475
X86或者x86_64平台上几乎没有大端法机器。不管大小端法机器char的字节J肯定是最先打出来的然后接着是k。如果是int型(或者说数据类型超过一个字节)就不同了,看我2楼的帖子:http://bbs.fishc.com/thread-45454-1-1.html
你的例题:
#include<stdio.h>
int
main()
{
char p[]="jklmnopqrstuvwxy";
int i;
int*t=(int *)p;
t+=2;
for(i=0;i<sizeof(p)-1;i++)
printf("%p:%.2x ",p+i,p);
printf("\n");
printf("=======int是这么存储的:大端法数字高位在低字节,小端法高位在高字节=======\n");
printf("*t = %x\n",*t);
printf("===============字符串类型:指针第一个是谁就是谁=========================\n");
printf("p[]= ");
for(i=0;i<4;i++)
printf("%.2x ",p);
printf("\n");
return 0;
}
以下是小端法输出结果:
不懂看样子应该是啥循环???初学 为什么是75747372?我想问问 问错了, 想问为什么是72737475
?? 补充一下 j是0x6a 本帖最后由 流行语 于 2014-7-3 09:35 编辑
#include<stdio.h>
main()
{
char *p="jklmnopqrstuvwxy";
int*t=(int *)p;
printf("p=%x\n",p);
printf("t1=%x\n",t);
t=t+1;
printf("t2=%x\n",t);
printf("t3=%x\n",t+1);
printf("p8=%x\n",p+8);
printf("p8=%s\n",p+8);
printf("%x\n",*(t+1));
printf("r=%d,s=%d,t=%d,u=%d\n",'r','s','t','u');
}我用的是vc++6.0测试的,我的机器整形占用4个字节,字符占用1个字节。我测试结果输出是75747372。因为t+1最后指向的地址是从r地址开始,占有4个字符即“rstu”,而这4个字符的ascii码分别是114(0111 0010),115(0111 0011),116(0111 0100),117(0111 0101),在输出时输出4个字节的内容,可是我的机器中的字节排序是从右到左,即“utsr”,所以最后输出75747372(从低字节到高字节),如果你的机器输出顺序从左到右,则结果为72737475(从高字节到低字节)。 本帖最后由 戏++ 于 2014-7-4 22:21 编辑
小端,低地址对应整形的低位,高地址对应高位
大端,反之
内存中72737475
地址 低--------->高
小端机,按整形读出来的值应该是 0x75747372
大端机,按整形读出来的值应该是 0x72737475
gentes 发表于 2014-7-2 23:10 static/image/common/back.gif
不懂看样子应该是啥循环???初学
根本没有循环。。。。 你输出的是下一个地址的内容,
还有。。t=t+1为t跳过4个字节 7楼正解:loveliness: 很久也前在学校学习的C++, 现在不记得多少了
戏++ 发表于 2014-7-3 09:58
小端,低地址对应整形的低位,高地址对应高位
大端,反之
小端机,按整形读出来的值应该是 0x75747372
小端机,按整形读出来的值应该是 0x72737475
两个都是小端?
char *p=jklmnopqrstuvwxy;内存中放的是jklmnopqrstuvwxy 对应的ascii
int*t=(int *)p;t也指向那块内存
t++; t越过jklm
printf("%x\n",*(t+1));t在越过nopq
也就是读取的是
rstu 二进制就不写了啊
内存中存放是
r s t u
其中 u 是最高位 r是最低位我记得学汇编是甲鱼讲过 这内存的方法
所以以十六进制读取时先读高位也就是u的ascii 所以回事 75 74 73 72
页:
[1]