之前简单的说了一下数组指针,今天用的时候就出现了问题,主要是不知道怎样把一个一个数组指针当做参数还有函数返回值,今天好好查了一下,写了一个简单的程序,主要用来说明这两个问题。好了,直接看代码吧。
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语言的精华,也是难点,这块一定要多看多练多理解,这样才能更好的使用指针。