C语言二维数组指针操作,示例程序如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[3][4] = {
1, 2, 3, 4,
5, 6, 7, 8,
9, 10, 11, 12
};
printf("a: %d\n", a); //元素1的地址,即第一个元素地址
printf("a[1][0]: %d\n", &a[1][0]);//元素5的地址
printf("*(a+1): %d\n", *(a + 1));//由输出结果看出,*(a+1)的地址为a[1][0]的地址
printf("a[1][1]: %d\n", &a[1][1]);//元素6的地址
printf("*(a+1)+1: %d\n", *(a + 1)+1);//由输出结果看出,*(a+1)+1的地址为a[1][1]的地址
printf("a+1: %d\n", a + 1); //由输出结果看出,a+1的地址为a[1][0](即元素5)的地址
printf("a[2][0]: %d\n", &a[2][0]);//元素9的地址
printf("a+2: %d\n", a + 2); //由输出结果看出,a+2的地址为a[2][0](即元素9)的地址
printf("*(*(a)): %d\n", *(*(a)));//*(*(a))即为a[0][0]的值
printf("*(*(a)+1): %d\n", *(*(a) + 1));//*(*(a)+1)即为a[0][1]的值
printf("*(*(a+1)): %d\n", *(*(a + 1)));//*(*(a + 1))即为a[1][0]的值
printf("*(*(a+1)+1): %d\n", *(*(a + 1)+1));//*(*(a + 1))即为a[1][1]的值
system("pause");
return 0;
/****************************************
结 论
1、(a+i) 代表整个第i行的地址,起始地址为第i行第一个元素的地址
2、*(a+i) 代表第i行第一个元素的地址
3、*(a+i)+j 代表第i行第j个元素的地址 即a[i][j]的地址
4、*(*(a+i)+j)) 代表a[i][j]的值
****************************************/
}
//程序运行结果:
/*
a: 3143976
a[1][0]: 3143992
*(a+1): 3143992
a[1][1]: 3143996
*(a+1)+1: 3143996
a+1: 3143992
a[2][0]: 3144008
a+2: 3144008
*(*(a)): 1
*(*(a)+1): 2
*(*(a+1)): 5
*(*(a+1)+1): 6
请按任意键继续. . .
*/