鱼C论坛

 找回密码
 立即注册
查看: 3321|回复: 13

一道简单的问题

[复制链接]
发表于 2014-7-2 22:19:33 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 风之残月 于 2014-11-10 10:20 编辑
  1. #include<stdio.h>
  2. main()
  3. {
  4.         char *p="jklmnopqrstuvwxy";
  5.         int  *t=(int *)p;
  6.         t=t+1;
  7.         printf("%x\n",*(t+1));
  8. }
复制代码
结果为什么是75747372而不是          72737475
j是0x6a

最佳答案

查看完整内容

X86或者x86_64平台上几乎没有大端法机器。不管大小端法机器char的字节J肯定是最先打出来的然后接着是k。如果是int型(或者说数据类型超过一个字节)就不同了,看我2楼的帖子:http://bbs.fishc.com/thread-45454-1-1.html 你的例题: 以下是小端法输出结果:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-2 22:19:34 | 显示全部楼层
本帖最后由 oggplay 于 2014-7-5 21:25 编辑
luckin 发表于 2014-7-4 18:42
小端机,按整形读出来的值应该是   0x75747372
小端机,按整形读出来的值应该是   0x72737475

[b]X86或者x86_64平台上几乎没有大端法机器。不管大小端法机器char的字节J肯定是最先打出来的然后接着是k。如果是int型(或者说数据类型超过一个字节)就不同了,看我2楼的帖子:http://bbs.fishc.com/thread-45454-1-1.html[/b]

抓图1.png
你的例题:
  1. #include<stdio.h>

  2. int
  3. main()
  4.     {
  5.             char p[]="jklmnopqrstuvwxy";
  6.             int i;
  7.             int  *t=(int *)p;
  8.             t+=2;
  9.            
  10.             for(i=0;i<sizeof(p)-1;i++)
  11.                 printf("%p:%.2x ",p+i,p[i]);
  12.             printf("\n");
  13.             
  14.             printf("=======int是这么存储的:大端法数字高位在低字节,小端法高位在高字节=======\n");      
  15.             printf("*t = %x\n",*t);
  16.             
  17.             printf("===============字符串类型:指针第一个是谁就是谁=========================\n");
  18.             printf("p[]= ");
  19.             for(i=0;i<4;i++)
  20.                 printf("%.2x ",p[i+8]);
  21.             printf("\n");
  22.             return 0;

  23. }
复制代码

以下是小端法输出结果:
抓图6.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-2 23:10:07 | 显示全部楼层
不懂  看样子应该是啥循环???  初学   
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-3 01:54:28 | 显示全部楼层
为什么是75747372?我想问问
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-3 01:55:07 | 显示全部楼层
问错了, 想问为什么是72737475

??
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-3 07:37:45 | 显示全部楼层
补充一下 j是0x6a
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-3 09:22:36 | 显示全部楼层
本帖最后由 流行语 于 2014-7-3 09:35 编辑
  1. #include<stdio.h>
  2. main()
  3. {
  4.         char *p="jklmnopqrstuvwxy";
  5.         int  *t=(int *)p;
  6.                 printf("p=%x\n",p);
  7.                 printf("t1=%x\n",t);
  8.         t=t+1;
  9.                 printf("t2=%x\n",t);
  10.                 printf("t3=%x\n",t+1);
  11.                 printf("p8=%x\n",p+8);
  12.                 printf("p8=%s\n",p+8);
  13.         printf("%x\n",*(t+1));
  14.                 printf("r=%d,s=%d,t=%d,u=%d\n",'r','s','t','u');
  15. }
复制代码
我用的是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(从高字节到低字节)。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-3 09:58:07 | 显示全部楼层
本帖最后由 戏++ 于 2014-7-4 22:21 编辑

小端,低地址对应整形的低位,高地址对应高位
大端,反之

内存中  72  73  74  75
   地址   低--------->高
小端机,按整形读出来的值应该是   0x75747372
大端机,按整形读出来的值应该是   0x72737475

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-3 12:13:58 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-3 23:37:01 | 显示全部楼层
你输出的是下一个地址的内容,
还有。。t=t+1为t跳过4个字节
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-4 06:35:22 | 显示全部楼层
7楼正解:loveliness:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-4 15:05:29 | 显示全部楼层
很久也前在学校学习的C++, 现在不记得多少了

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-4 18:42:36 | 显示全部楼层
戏++ 发表于 2014-7-3 09:58
小端,低地址对应整形的低位,高地址对应高位
大端,反之

小端机,按整形读出来的值应该是   0x75747372
小端机,按整形读出来的值应该是   0x72737475

两个都是小端?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-5 09:57:13 | 显示全部楼层
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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 11:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表