1. 一维数组名称
2. 除下面两种情况外,一维数组名称都是指向数组中首元素地址的指针
1)对数组名进行sizeof运算,如sizeof(arr)取整个数组的长度20
2)对数组名取地址,是指向整个数组的指针,如
int *p = &arr;
3. 数组名 相当于是指针常量,具有如下性质:
int * const a
arr = NULL; //(×)指针的指向不可以修改
arr[0] = 100; //(√)指针指向的值可以修改
4. 数组下标可以为负数,前提是指向数组的指针进行了偏移
p += 3;
printf("p[0] = %d\n",p[-1]); //给人看的,可读性强
printf("p[0] = %d\n",*p(p-1)); //给机器看的
5. 用sizeof计算数组长度
int len = sizeof(arr)/sizeof(int);
6. 数组指针的定义方式
(1)先定义数组的类型,再通过类型 定义数组类型的指针
typedef int(ARRAY_TYPE)[5]; //ARRAY_TYPE是一个存放5个int类型数据的数组类型
ARRAY_TYPE *arrP = &arr; //arrP 等价于 arr
printf("arr[0] = %d\n",(*arrP)[1]);
printf("arr[0] = %d\n",*((*arrP)+1));
(2)直接定义数组类型的指针(常用)
typedef int(*ARRAY_TYPE)[5]; //ARRAY_TYPE是一个存放5个int类型数据的数组指针类型
ARRAY_TYPE P = &arr;
printf("arr[0] = %d\n",(*P)[0]);