数组的本质

数组的概念

数组是相同类型的变量的有序集合

数组的大小

  • 数组在一片连续的内存空间中存储元素
  • 数组元素的个数可以显示或隐式指定

例子1:数组的初始化

#include<stdio.h>
int main()
{
	int a[5] = {1,2};
	int b[] = {1,2};
	
	printf("a[2] = %d
",a[2]);
	printf("a[3] = %d
",a[3]);
	
	printf("sizeof(a) = %d
",sizeof(a));
	printf("sizeof(b) = %d
",sizeof(b));

	return 0;
}

数组地址与数组名

  • 数组名代表数组首元素的地址
  • 数组的地址需要用取地址符&才能得到
  • 数组首元素的地址值与数组的地址值相同
  • 数组首元素的地址与数组的地址是两个不同的概念

数组名的盲点

  • 数组名可以看做一个常量指针
  • 数组名“指向”的是内存中数组首元素的起始位置
  • 数组名不包含数组的长度信息
  • 在表达式中数组名只能作为右值使用
  • 只有在下列场合中数组名不能看做常量指针
    • 数组名作为sizeof操作符的参数
    • 数组名作为&运算符的参数

例子2:数组和指针的不同

#include<stdio.h>

int main()
{
	int a[5] = {0};
	int b[2];
	int* p = NULL;
	
	p = a;
	
	printf("a = %p
",a);
	printf("p = %p
",p);
	printf("b = %p
",b);

	return 0;
}

小结

  • 数组是一片连续的内存空间
  • 数组的地址和数组首元素的地址意义不同
  • 数组名在大多数情况下被当成常量指针处理
  • 数组名其实并不是指针,不能将其等同于指针
原文地址:https://www.cnblogs.com/yanyun888/p/9213161.html