平时使用时指针与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