posts - 34,comments - 2,trackbacks - 0
平时使用时指针与sizeof很难扯上关系,不外乎就int *p;sizeof(P)=4;但是在一些公司笔试时就会常常考察。
提出问题:
int a[5]={1,2,3,4,5}; sizeof(&a)=?   sizeof(a)=? sizeof(a[0])=?  sizeof(&a+1) =?     
混淆了吧,o(︶︿︶)o 唉有时候我会苦闷,为什么要选择程序员这条路呢,而且还要自学的。自己一个人找工作好辛苦啊。
解决问题前必须了解指针与数组的关系;
指针与数组当然是两个不相关的概念,但是却在编写代码时可以互用。
①、指针:int a[5]={1,2,3,4,5}; int *p=a;  
      以指针形式访问 *(p+4) 表示从p向后偏移4个位置,然后取值。
      以数组形式访问 p[0]、p[1]....
②、数组:int a[5]={1,2,3,4,5}; 
      以指针形式访问 *(a+4) 表示数组首地址加上4 个字符的偏移量
      以数组形式访问、...
对,他们就这样的关系,编译器总是把以下标的形式的操作解析为以指针的形式的操作。
那么 对于问题
a 在这里代表是的数组首元素的地址即a[0]的首地址。sizeof(a)=20
&a 代表的是数组的首地址。sizeof(&a)=4
&a+1 表示数组的首地址+一个数组。则 +5*sizeof(int)。所以它表示以指针形式访问,sizeof(&a+1)=4;
sizeof(a[0])   其实是sizeof(1)  一个int的内存。 =4
sizeof(&a[0])、sizeof[&a[0]+1]   表示a[0]的地址+1,是指针类型 ,=4

////////////////////////如有误解,欢迎指正。
posted on 2011-10-11 23:43 Yu_ 阅读(652) 评论(3)  编辑 收藏 引用 所属分类: The Interview

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理