C/C++二維陣列(陣列指標)——二維陣列的傳值和二維陣列的一維訪問
阿新 • • 發佈:2019-01-07
二維陣列既可以通過二維訪問也可以通過一維訪問。
對於二維陣列的傳值,引進了陣列指標。
#include <stdio.h> void foo(int *p,int n)//一維訪問 { for(int i=0;i<n;i++) printf("%d ",p[i]); printf("\n"); } //因為二維陣列的列數必須初始化 void func(int (*p)[4],int n)//引入陣列指標來傳遞二維陣列 { for(int i=0;i<n;i++) { for(int j=0;j<4;j++) { printf("%d\t",p[i][j]);//*(*(p+i)+j) } putchar(10); } putchar(10); } int main() { int arr[3][4]={0,1,2,3,4,5,6,7,8,9,10,11}; //一維訪問 int *p=(int*)arr;//既可以通過二重迴圈訪問,也可以通過一重迴圈訪問 foo(p,12);//通過一維傳遞 for(int i=0;i<12;i++) printf("%d ",p[i]); printf("\n"); //二維訪問 func(arr,3); for(int i=0;i<3;i++) { for(int j=0;j<4;j++) printf("%d\t",arr[i][j]);//*(*(arr+i)+j) putchar(10); } return 0; }
二維可以轉一維訪問,那麼一維同樣可以轉二維訪問:
#include <stdio.h> int main() { // int arr[10]; // int *p = arr; // int **pp = &arr;//錯誤 int arr[12]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*p)[4]=(int(*)[4])arr; for(int i=0;i<sizeof(arr)/sizeof(int[4]);i++) { for(int j=0;j<4;j++) { printf("%d\t",p[i][j]); } putchar(10); } return 0; }