二维数组的行列指针

行指针原理

    我们现在想定义一个指针,使得这个指针有这样的特性—— 指针 p指向arr[0], 指针 p+1 指向arr[1] ,指针 p+2指向arr[2], 也就是指针每移动一个单位的地址就指向下一个一维数组,那么这个指针必须满足下面二个条件:1、必须是整型 2、必须每移动一个单位的地址时实际上移动一个一维数组的长度即3个整型量。

           int data[3][4];

行指针:int (*p)[4];

        初始化:p = a;

                   p = &a[0];

        引用:   p[i][j]

列指针:int *p;

        初始化:p = a[0];

                   p = *a;

                   p = &a[0][0];

        引用:  p[i*4+j]


示例代码

 1 #include <stdio.h>
 2  
 3 void fun(int *p, int row, int col);
 4 void fun1(int (*p)[5], int row);
 5  
 6 int main()
 7 {
 8     int a[3][5];
 9  
10     for (int i=0; i<3; i++)
11     {
12         for (int j=0; j<5; j++)
13         {
14             a[i][j] = i*5+j;
15         }
16     }
17  
18     fun(a[0], 3, 5);
19  
20     fun1(a, 3);
21  
22     return 0;
23 }
24  
25 void fun(int *p, int row, int col)
26 {
27     for (int i=0; i<row; i++)
28     {
29         for (int j=0; j<col; j++)
30         {
31             printf("%d", p[i*col+j]);
32         }
33         printf("
");
34     }
35  
36     getchar();
37 }
38  
39 void fun1(int (*p)[5], int row)
40 {
41     for (int i=0; i<row; i++)
42     {
43         for (int j=0; j<5; j++)
44         {
45             printf("%d", p[i][j]);
46         }
47         printf("
");
48     }
49  
50     getchar();
51 }
View Code
原文地址:https://www.cnblogs.com/TaoyzDream/p/3675625.html