设为首页 加入收藏

TOP

数组nice to see you again
2014-11-23 21:37:41 来源: 作者: 【 】 浏览:18
Tags:数组 nice see you again
#include 
  
   
#include 
   
     /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) { int a[5]={1,2,3,4,5}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int)a+1); printf("%d,%d",ptr1[-1],*ptr2); return 0; }
   
  

上测试程序来自《C语言深度解析》中的一个习题:

分析如下:

先打印出结果:

\

格式符变一下;;;;

	printf("%d,%p",ptr1[-1],*ptr2);

\


ptr1[-1]结果为5,很显然,这个表达式看上去乖乖的,但是编译器并未报错 运行正常,,个人认为这个结果完全正确!

ptr1指针指向数组最后一个元素接下来的那个地址,ptr1[-1]这磊 http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcHRyMc/gtbHT2sr91+nD+2G1xNf308OjrC0xvs3N+brzzcvSu7j2yv3X6dSqy9i089ChtcTE2rTmtaXUqqOs0rK+zcrHYVs0Xcv51Nq1xLXY1re1pdSqPC9wPgo8cD7K5LP2NcrH1f3It7XEo6E8L3A+CjxwPjxicj4KPC9wPgo8cD4qcHRyMiAgICA9ICAgMj8/P7K7o6GjoaOho6E8L3A+CjxwPqOoaW50o6lhJiM0Mzsx0+thJiM0MzsxysfN6sirsrvNrLXEwb249rarzveho8Tjx/i31sP3sNfBy8S+09Cho6GjoaOhozwvcD4KPHA+PHByZSBjbGFzcz0="brush:java;">#include #include /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) { int a[5]={1,2,3,4,5}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int)a+1); printf("%p\n",(int *)(int)a+1);//0022ff28 printf("%d,%p",ptr1[-1],*ptr2); return 0; }
*ptr2的值就是内存单元0022ff28内存储存的内容!鬼知道编译器是怎么想的

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Power Management 下一篇GTK编程基础----按钮构件

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: