学过C语言的朋友想必对数组都不陌生,数组就是一组相同元素的集合。那数组名代表着什么呢?今天我们来深度了解一下数组名这点事。
数组名是数组首元素地址
为了验证这一结论,我们在编译器上用打印地址的形式输出数组名和数组首元素地址。
可以发现打印结果是一摸一样的。所以在函数接收数组的时候,我们也可以使用指针的方式。
取地址数组名是数组的地址
取地址数组名是数组的地址这句话是什么意思呢?我们用同样的方式打印数组名,但是在数组名前加一个取地址符号。
两者看似没差别,但是当我们在对它们进行+1的时候发现&arr[0]与&arr[0]+1之间差了4个字节,也就是1个int,而&arr与&arr+1之间差了40个字节,也就是10个int。
在sizeof中数组名代表整个数组
在x86的情况下一个地址的大小为4个字节,但打印sizeof(arr)的值确实40,所以数组名在sizeof中代表整个数组。
ps:数组越界的检查是抽查,编译器不一定检查得出来;动态内存的越界一般是在释放空间的时候检查