C语言的数组指针与指针数组(One)
2016-06-25 本文已影响389人
遮天的龙
一、数组指针与指针数组:
- 数组指针<——>本质是指针
- 指针数组<——>本质是数组
上图:
理解*(arr +0) &arr[0] &arr[0]+1
a 表示第 0 行首地址, a+i 表示第 i 行首地址
*(a+i), a[i], &a[i][0]表示第 i 行第 0 个元素地址
*(a+i)+j, a[i]+j, &a[i][j]表示第 i 行第 j 个元素地址
*(*(a+i)+j) *(a[i]+j), a[i][j]表示第 i 行第 j 个元素
二、数组指针: int (*pName)[N];
对一维数组取地址,等价于数组指针而不是二级指针。
例如:
int arrray[10];
int(*pa)[10] = &array; 正确
int **pa = &array; 错误
指针 32位机下,大小均为4个字节;
指针的本质,就是一个有类型的常量地址;
Type * var;
type 决定了类型(步长),* 表示该变量是指针,var 用于存储地址;
切记: 指针的运算是,地址值+类型的运算;
int [10] printf("(int)&a[9]-(int)&a[4] = %d\n",
(int)&a[9] -(int)&a[4])=20;
(int)&a[9] 结果为int型数值了;
- 二级指针:是一种指向指针的指针。程序员可以通过它实现间接访问数据,和改变一级指针的指向问题。
(1)、定义、初始化;通过n级指针,修改n-1级指针的指向;间接数据访问;
(2)、二级指针的步长,都是4字节。