二维数组与指针

xiaoxiao2021-02-28  134

二维数组 #include <stdio.h> #include <stdlib.h> int main() { int arr[4][2] = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; printf("arr=%p,arr+1=%p\n", arr, arr + 1);  //输出显示二维数组arr的地址和一维数组arr[0]的地址是相同的,均为数组首元素的地址,其值和&arr[0][0]相同 printf("arr[0]=%p,arr[0]+1=%p\n", arr[0], arr[0] + 1);  //arr[0]指向4字节长的数据对象,对arr[0]加1导致它的值增加4 printf("*arr=%p,*arr+1=%p\n", *arr, *arr + 1);//*arr和arr[0]是一样的 printf("arr[0][0]=%d\n", arr[0][0]); printf("*arr[0]=%d\n", *arr[0]);  //arr[0][0]和*arr[0]的值是相同的 printf("**arr=%d\n", **arr);  //二维数组名必须两次取值才可以取出数组中存储的数据 printf("arr[2][1]=%d\n", arr[2][1]); printf("*(*(arr+2)+1)=%d\n", *(*(arr + 2) + 1));  //分两步取二维数组元素可采用*结合+ system("pause"); return 0; }

结果:

0039FA2C      0039FA34

0039FA2C      0039FA30 0039FA2C      0039FA30

1

1

1

 6

 6

arr0039FA2Carr+10039FA34arr[0]0039FA2Carr[0]+10039FA30*arr0039FA2C*arr+10039FA30 从上表可以看出:arr、arr[0]、*arr的输出是一样的,它们都指向数组arr的起始地址,三者加1分别加了8,4,4这个结果的不同点在于?

arr[0][0]1*arr[0]1**arr1arr[2][1]6*(*arr+2)+1)6 从上表可以看出取数组中的某一元素有好几种方法:

(1)可以直接用arr[i][j]来获取i行j列的元素

(2)也可以采用指针*arr[i]来获取第i行的第一个元素

(3)也可以采用两次解引用来获取数组第一个元素

(4)也可以采用*和+的配合*(*arr+i)+j)来获取i行j列的元素。

转载请注明原文地址: https://www.6miu.com/read-34113.html

最新回复(0)