数组本质分析

 
  • 数组是相同类型变量的有序集合,例如:int a[5];
  1. a代表数组第一个元素的起始地址
  2. 有5个int类型的数据,且是5个连续的内存空间。
  3. 这个20个字节的空间的名字叫a,a[0],a[1]都是数组中的元素,数组中的元素没有名字
  • 数组的大小
  1. 数组在一片连续的内存空间中存储元素
  2. 数组元素的个数可以显式或隐式指定:int a[5] = {2,3}; int b[] = {1,2};
 1 #include <stdio.h>
 2 int main()
 3 {
 4      int a[5] = {1,2};
 5      int b[] = { 3, 4 };
 6      printf("a[2]=%d
",a[2]);
 7      printf("a[3]=%d
",a[3]);
 8      printf("sizeof(a)=%d
",sizeof(a));
 9      printf("sizeof(b)=%d
", sizeof(b));
10      printf("数组a的元素个数=%d
",sizeof(a)/sizeof(a[0]));
11      printf("数组b的元素个数=%d
", sizeof(b) / sizeof(b[0]));
12      printf("&a=%p
",&a);
13      printf("&a[0]=%p
", &a[0]);
14      printf("a=%p
",a);
15      return 0;
16 }
17 运行结果:
18 a[2]=0
19 a[3]=0
20 sizeof(a)=20
21 sizeof(b)=8
22 数组a的元素个数=5
23 数组b的元素个数=2
24 &a=004FF9F4
25 &a[0]=004FF9F4
26 a=004FF9F4
27 请按任意键继续. . .
  • 数组地址与数组名
  1. 数组名代表数组首元素的地址
  2. 数组的地址需要用取地址符&才能得到
  3. 数组首元素的地址和数组的地址相同
  4. 数组首元素的地址和数组的地址是两个不同的概念
  • 数组名的盲点
  1. 数组名可以看做一个常量指针
  2. 数组名“指向”的是内存中数组首元素的起始地址
  3. 数组名不包含数组的长度信息
  4. 在表达式中,数组名只能作为常量使用
  5. 只有在下列场合中数组名不能看做常量指针:数组名作为sizeof操作符的参数,数组名作为&运算符的参数
 1 #include <stdio.h>
 2 int main()
 3 {
 4      int a[5] = { 0 };
 5      int b[2];
 6      int *p = NULL;
 7      p = a;
 8      printf("a=%p
",a);
 9      printf("p=%p
",p);
10      printf("&p=%p
",&p);
11      printf("sizeof(a)=%d
",sizeof(a));
12      printf("sizeof(p)=%d
", sizeof(p));
13      return 0;
14 }
15 运行结果:
16 a=004FFBD4
17 p=004FFBD4
18 &p=004FFBB8
19 sizeof(a)=20
20 sizeof(p)=4
21 请按任意键继续. . .
 
 
主要记录的是学习听课的笔记
原文地址:https://www.cnblogs.com/chengeputongren/p/12176144.html