int numbers[5] = {1,2,3,4,5};
int *ptr1 = numbers; //numbers表示第一个元素的地址
int *ptr2 = &numbers[0]; //把第一个元素的地址赋值给指针ptr2
int *ptr3 = numbers + 0; //指针运算,对 numbers 做加减运算,是对地址的运算,数组(或指针)初始化为什么类型在运算是就遵循该类型的运算规则
在C语言中 numbers[1] 在编译时会转换成 *(numbers + 1),numbers 表示第一个数组元素的地址,经过指针运算,按照偏移量(numbers + 1)表示numbers偏移一个单位(int),numbers[1]表示的是第2个元素的值。
int numbers2[5] = {1,2,3,4,5};
numbers = numbers2;
numbers2 = numbers;
以上代码会发生编译错误。
数组名在使用时表现得像一个常指针,不能被指向另外一块内存地址,但是我们可以改变指向该数组的指针变量。