为什么C语言中的数组参数会退化为指针?

退化的意义:

 

二维数组参数:

 

等价关系:

 

知识点:

 

传递与访问二维数组示例:

 1 #include <stdio.h>
 2 
 3 void access(int a[][3], int row)
 4 {
 5     int col = sizeof(*a) / sizeof(int);
 6     int i = 0;
 7     int j = 0;
 8     
 9     printf("sizeof(a) = %d\n", sizeof(a));
10     printf("sizeof(*a) = %d\n", sizeof(*a));
11     
12     for(i=0; i<row; i++)
13     {
14         for(j=0; j<col; j++)
15         {
16             printf("%d\n", a[i][j]);
17         }
18     }
19     
20     printf("\n");
21 }
22 
23 void access_ex(int b[][2][3], int n)
24 {
25     int i = 0;
26     int j = 0;
27     int k = 0;
28     
29     printf("sizeof(b) = %d\n", sizeof(b));
30     printf("sizeof(*b) = %d\n", sizeof(*b));
31     
32     for(i=0; i<n; i++)
33     {
34         for(j=0; j<2; j++)
35         {
36             for(k=0; k<3; k++)
37             {
38                 printf("%d\n", b[i][j][k]);
39             }
40         }
41     }
42     
43     printf("\n");
44 }
45 
46 int main()
47 {
48     int a[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};
49     int aa[2][2] = {0};
50     int b[1][2][3] = {0};
51     
52     access(a, 3);
53     access(aa, 2);
54     access_ex(b, 1);
55     access_ex(aa, 2);
56     
57     return 0;
58 }

53行传递的参数与形参类型不匹配,访问会出现意想不到的结果。55行也是类型不匹配。

注释掉53、55行,运行结果如下:

 

 

小结:

 

posted on 2018-08-28 00:06  周伯通789  阅读(216)  评论(0编辑  收藏  举报