再谈数组指针(做函数的参数和返回值)

之前简单的说了一下数组指针,今天用的时候就出现了问题,主要是不知道怎样把一个一个数组指针当做参数还有函数返回值,今天好好查了一下,写了一个简单的程序,主要用来说明这两个问题。好了,直接看代码吧。

 1 int (*func(int (*a)[4]))[4]                //定义一个func函数,它的一个参数为数组指针,返回值类型也为数组指针
 2 /*  int(*)[4]为函数返回值的类型,func()为函数名,(int (*a)[4])为参数类型*/
 3 {
 4     int i;
 5     for(i=0;i<4;i++)
 6         {
 7             *(*(a+1)+i)=*(*a+i); //*(a+1)等同于a[1]的地址,*a等同与a[0]的地址,
 8         }
 9     return a;                    //返回的为数组名,也可以看做0行分数组的地址
10 
11 }
12 int main()
13 {
14     int i,j;
15     int (*p)[4];                //定义一个数组指针用来接收函数的返回值
16     int a[2][4]={1,2,3,4,0,0,0,0};
17     p=func(a);                    //调用func函数把数组第一行的值赋给第二行
18     for(i=0;i<2;i++)
19         
20     {
21         for(j=0;j<4;j++)
22         {
23             printf("%4d",*(*(p+i)+j));    //用数组指针来访问二维数组
24         }
25         printf("
");
26     }
27         return 0;
28 }

调用部分和返回部分都可以直接用二维数组名来表示,因为数组名也可以用来表示0行分数组的地址,而数组指针指向的就是二维数组的分数组。

指针是c语言的精华,也是难点,这块一定要多看多练多理解,这样才能更好的使用指针。

原文地址:https://www.cnblogs.com/kingos/p/4523289.html