一、使用“指向”二维数组“元素”的指针
#include <stdio.h>
int main()
{
int a[3][4] = {
1,3,5,7,9,11,13,15,17,19,21,23 };
//可看作: int a[3][4] = { a[0],a[1],a[2] }; 其中a[0]是首元素,且a[0]是一维数组名;
//a[0]可看作: int a[0][4] = { a[0][0],a[0][1],a[0][2],a[0][3] };其中a[0]为数组名;
int* p = &a[0][0];//将二维数组看成一个有12个元素的一维数组,其中a[0][0]为首元素地址,
//int* p = a[0]; //a[0]为二维数组的首元素,此处视作一维数组名,代表a[0][0]地址;
//int* p = a;错误 //a为二维数组名,代表首元素a[0]的地址(行地址),&a[0]=>&(&a[0][0])
//这种写法错误,虽编译器可通过,但理论上说不通,实际为二级指针,不能用二级指针直接赋值;
//int* p=*a; //*a等价于*(&a[0]),即a[0],其中a[0]为数组名代表&a[0][0]
while (p < *a + 12)
{
printf("%d ", *p++);
}
}
运行结果:
1