本文记录我在学习数组时对数组一些比较难懂的地方的理解。
在绝大多数的表达式中,数组名的值就是指向数组第一个元素的指针,这是大家耳熟能详的。也就是说,一个数组的名字就是一个指针常量,表示的是数组第一个元素的物理地址。这样看来,数组似乎跟指针差不多对吧。然而这其中还是有很大区别的。下面我以自己定义的一个数组为例解释一下。
int array[ ] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
int *pointer;
1、数组名字是指针常量,而指针可以是个变量。这也就意味着array++是无法通过编译的。
2、数组名字代表的是一段物理内存的开始,也就是说,当我们声明一个数组时,它同时也分配了一些内存空间,用于容纳数组元素。而我们声明一个指针时,它仅仅分配了容纳指针本身的空间而已。
3、数组名加上一个偏移量,大小为是数组首地址加上 最外层的一位数组的大小*偏移量。
第三点是比较难以理解的。同样是代表地址,数组名跟指针的值分别加上一个常数,结果是天差地别。
例如,我们打印出pointer、array