指针访问二维数组的几种常用方法

内容皆是从网络上搜索得到,写在这里备忘。

<一>因为二维数组在内存上是按照逐行顺序排列的,所以也可以看成是一维数组,这样访问

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	", 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
", *pArray);
 9         printf("array[1][2] = %d
", *(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
", pArray[0][0]);
 9         printf("array[1][2] = %d
", 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
", pArray[0][0]);
11         printf("array[1][2] = %d
", pArray[1][2]);
12                 
13         return 0;
14 }

转载请注明出处:http://www.cnblogs.com/rongfangliu/p/howtousePoint.html

原文地址:https://www.cnblogs.com/rongfangliu/p/howtousePoint.html