注:a[i][j]为二维数组,以下都是针对二维数组而言!
表示形式 | 含义 | 备注 |
---|---|---|
a | 二维数组名,指向一维数组a[0],即0行首地址 | 行首地址 |
a[0], *(a+0), *a, &a[0][0] | 0行0列元素地址 | 元素地址 |
a+1, &a[1] | 1行首地址 | 行首地址 |
a[1], *(a+1) | 1行0列元素的地址,即a[1][0]的地址 | 元素地址 |
*(a[1]+2), *(*(a+1)+2), a[1][2] | 1行2列元素的值,即a[1][2]的值 |
注意:
1. a[1]和*(a+1)等价,在二维数组中只是地址的两种不同表现形式;
2. (1) a+1, &a[1] : 表示1行首地址,指向一维数组a[1],指向“行“;
(2) a[1],*(a+1),a[1]+0 : 表示1行0列元素的地址,指向列元素,指向“列”;
总结:(1)和(2)地址虽相同,但含义却完全不同;
3. 在指向行的指针前面加一个*,就转换为指向列的指针;如a和a+1是指向行的指针,*a和*(a+1)就成为了指向列的指针,分别指向0行0列的元素和1行0列的元素;
4. 在指向列的指针前面加上&,就成为了指向行的指针;如a[0]是指向0行0列的元素的指针,&a[0]与&*a等价,也就是与a等价,它指向二维数组的0行;
参考:《C语言程序设计》谭浩强版
如有错误,欢迎指正!谢谢!