c语言中关于数组与指针的一点心得
相信大多人刚刚接触C语言的数组时,一定听过类似的话:数组名有时候可以看做指针,但有时候不能看做指针。也一定发现过数组名的地址与对数组名进行取地址运算之后得到的地址相等,相信大多数人也为此困惑,这篇文章就是面对初学者,希望可以解除你们困惑。
数组名什么情况不可以看做指针
(1)数组是sizeof运算符的操作数。
(2)数组是地址运算符&的操作数。
(3)当字符串字面值被用来初始化一个char型数组或char_t数组时。
第一个应该不用多说了,相信大家都知道。第三个个人理解作者想表达的意思是:char a[0] = “2016.12.17”与 char *p = “2016.12.17”这两者的意义是不同的,前者是将数组a保存在堆栈中,可以对此块内存进行修改。而后者将字符串放置在只读存储区内,无法进行修改。因此二者并不等价。
重点说说是第二个,也就是上述的问题:为何数组名的地址与对数组名进行取地址运算之后得到的地址相等。
#include <stdio.h>
int main()
{
int a = 10;
int **pp;
int *p;
p = &a;
pp = &p;//&&a
printf("a的地址为:%d p的地址为:%d", p, pp);
return 0;
}
此时p是指向a的指针,pp是指向