纠正<c专家编程>231页错误 | 函数返回数组
在<c专家编程>中第230--231页,讲述了使用指针返回一个数组的方法
文章首先要求声明一个函数,这个函数描述成 返回一个指向包含20个int元素的一维数组的指针。
int (*fun())[20];
这个声明没有错,编译可以通过。
但是在函数实现的时候,书上如下
1 int (*fun())[20] 2 3 { 4 5 int (*pear)[20]; 6 7 pear = calloc(20,sizeof(int)); 8 9 return pear; 10 11 }
编译时报错!
因为calloc返回一个int*的类型,而我们的pear是一个指向一整个数组的类型即(int (*)[20])型,所以需要进行强转!
具体实现如下
编译成功且正常运行!
---------------------------------------------------------------------------------------------------
另:很多人会对这个函数声明形式感觉奇怪,如果该函数需要参数,那如何写?在上图我已经给出了具体形式。不过这种形式很少见,最好不要这样写,这是【20】
引发的一个噱头!
------------------------------------------------------------------------------------------------------
对于第57页的
char (*j)[20]; j=(char (*)[20])malloc(20);
j 是 一个指向具有20个char类型的数组的指针,看过这个的人,很快就能找出 上述出错的解决方法!