指针访问二维数组的几种常用方法
内容皆是从网络上搜索得到,写在这里备忘。
<一>因为二维数组在内存上是按照逐行顺序排列的,所以也可以看成是一维数组,这样访问
1 #include <stdio.h> 2 int main(void) 3 { 4 int x[2][2] = {{1,2},{3,4}}; 5 int * y = (int *) x; 6 int i = 0; 7 for(i = 0; i < 2 * 2; i++) printf("%d\t", y[i]); 8 return 0; 9 }
<二>自己计算偏移量访问
1 int main() 2 { 3 int iArray[2][3] = {{1,2,3},{4,5,6}}; 4 int *pArray = NULL; 5 6 pArray = iArray; 7 8 printf("array[0][0] = %d\n", *pArray); 9 printf("array[1][2] = %d\n", *(pArray + 1 * 3 + 2)); 10 11 return 0; 12 }
<三>用指向数组的指针来访问二维数组的元素
1 int main() 2 { 3 int iArray[2][3] = {{1,2,3},{4,5,6}}; 4 int (*pArray)[3] = NULL; 5 6 pArray = iArray; 7 8 printf("array[0][0] = %d\n", pArray[0][0]); 9 printf("array[1][2] = %d\n", pArray[1][2]); 10 11 return 0; 12 }
<四>指向指针的偏移
1 const int row = 2, col = 3; 2 int main() 3 { 4 int a[6][9]; 5 printf("%d",a[row][col]); 6 *(*(a+row)+col) = 10; 7 printf("%d",a[row][col]); 8 9 return 0; 10 }
<五>一种常用的用法,我用来存储图像,比较方便
1 int main() 2 { 3 int **img = NULL; 4 int width = 64, height = 64; 5 int i = 0, j = 0; 6 7 img = (int **)malloc(sizeof(int *)*height); 8 for (i = 0; i<height; i++) 9 { 10 img[i] = (int *)malloc(sizeof(int)*width); 11 } 12 13 for (i = 0; i<heiht; i++) 14 { 15 for (j = 0; j<width; j++) 16 { 17 printf("%d ",img[i][j]); //这里 18 } 19 } 20 21 return 0; 22 }
<六>一种错误的用法,注意!
1 #include <stdio.h> 2 3 int main() 4 { 5 int iArray[2][3] = {{1,2,3},{4,5,6}}; 6 int **pArray = NULL; 7 8 pArray = iArray; 9 10 printf("array[0][0] = %d\n", pArray[0][0]); 11 printf("array[1][2] = %d\n", pArray[1][2]); 12 13 return 0; 14 }
转载请注明出处:http://www.cnblogs.com/rongfangliu/p/howtousePoint.html