文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>刘峰六的C语言讲解-- C指针(1)

刘峰六的C语言讲解-- C指针(1)

时间:2010-08-29  来源:sohu2000000

请给出下面程序的运行结果___  

/* env: 32 bits*/
int
main(void)
{
  long *p=0x100;
  p=p+sizeof(long);
  printf("%x\n",p);
  
  return 0;
}
/* env: 32 bits*/
int
main(void)
{
  long *p=0x100;
  p=p+sizeof(long);
  printf("%x\n",p);
  return 0;
}


正确答案:  110
解析: 本题考察三个知识点: 1. 存储类型 2. 指针运算 3. printf格式化输出 我们来分析一下。 1 存储类型    基于题目给出了32bit运行环境的概念,根据C99对于编译器是如何在内存中识别数据类型和读取的协议规范可知:    sizeof(char)=1;    sizeof(short)=2;    sizeof(int)=4;    sizeof(long)=4;    sizeof(float)=4;    sizeof(double)=8;       所以,程序中 p=p+sizeof(long); 就转化成为 p=p+4; 2 指针的运算    一般int类型算数int i =2 i=i+4 那么 i=6正确;    但是指针真的运算有着其不同的含义,按照我个人的理解,解释如下    ptr=ptr+m 的意义是 ptr沿着内存先前移动,移动了m个单位的距离, 单位的距离取决于ptr所指向的数据的内存存储空间的大小    这里 p 指向long, 所以 p=p+4, 并不是 p=0x100+4;而是 p = 0x100+4*4 = 0x100+16; 3.printf的格式化输出    printf的格式是%x,说明输出的内容是结果的十六进制模式,需要小心应答    我们平时说的类型存储,sizeof()等等都是针对十进制而言    所以上面提到的16,并不是内存看到的指令,    16 = 0x10;    p=0x100+0x10=0x110    至此得到正确答案 综上所述,争取答案是110 刘峰六于 2010-08-22 23:38:56   本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/asiainfolf/archive/2010/08/29/5848553.aspx
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载