也谈数组a与&a

今天做了一个题目:

 

1 #include <stdio.h>    
2 int main()    
3 {    
4   int  a[5= {1,2,3,4,5};    
5   int *ptr =  (int*)(&a+1);    
6   printf("%d %d" , *(a+1), *(ptr-1) );    
7 }

 

 大家可以试下,看下答案是否和自己想的一样。

这题的关键是理解a和&a的区别。

a是指向int类型的常量指针。

&a则是指向int [5]的一个指针。相当于int (*p)[5] = &a;

如果你想这样定义的话int *p = &a;

这时VC编译器会提示一个WARNING:'int *' differs in levels of indirection from 'int (*)[5]',也就是说类型不匹配

这道题取得了一个不存在的地址(&a+1)之后,然后强制类型转化为(int *),于是*(p-1)便指向了a的最后一个元素。

有什么不对的地方请大家指正!

 

 

-------------踏着落叶,追寻着我的梦想

 

posted on 2010-05-09 22:57  寂寞的肥肉  阅读(368)  评论(0编辑  收藏  举报

导航