数组的概念
·数组是相同类型的变量的有序集合
数组的大小
·数组在一片连续的内存空间中存储元素
·数组元素的个数可以显示或隐式指定
1.a[2] a[3] a[4]的值为0;
2.b包含了2个元素
数组地址与数组名
·数组名代表数组首元素的地址
·数组的地址需要用取地址符&才能得到
·数组的首元素的地址值与数组的地址值相同
·数组首元素的地址与数组的地址是两个不同的概念
例子27-2:
include"stdio.h"
int main()
{
int a[5] = { 0 };
printf("a = %p\n",a);
printf("&a = %p\n",&a); //虽然都是首地址,但是长度不同
printf("&a[0] = %p\n",&a[0]);
return 0;
}
输出结果:
a = 012FF888
&a = 012FF888
&a[0] = 012FF888
a与&a虽然输出结果相同,都是首地址,但是&a的长度不同。
数组名的盲点
·数组名可以看做一个常量指针
·数组名“指向”的是内存中数组首元素的起始地址
·数组名不包含数组的长度信息
·在表达式中数组名只能作为右值使用
·只有在下列场合中数组名不能看做常量指针
-数组名作为sizeof操作符的参数
-数组名作为&运算符的参数
例子27-3:
include"stdio.h"
int main()
{
int a[5] = { 0 };
int b[2];
int* p = NULL;
p = a;
printf("a = %p\n",a);
printf("p = %p\n",p);
printf("&p = %p\n",&p);
printf("&sizeof(a) = %d\n",sizeof(a));
printf("&sizeof(p) = %d\n",sizeof(p));
printf("\n");
p = b;
printf("b = %p\n",b);
printf("p = %p\n",p);
printf("&p = %p\n",&p);
printf("&sizeof(b) = %d\n",sizeof(b));
printf("&sizeof(p) = %d\n",sizeof(p));
}
输出结果:
a = 0087F9E4
p = 0087F9E4
&p = 0087F9C8
&sizeof(a) = 20
&sizeof(p) = 4
b = 0087F9D4
p = 0087F9D4
&p = 0087F9C8
&sizeof(b) = 8
&sizeof(p) = 4
小结:
·数组是一片连续的内存空间
·数组的地址和数组首元素的地址意义不同
·数组名在大多数情况下被当成常量指针处理
·数组名其实并不是指针,不能将其等同于指针
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。