纠正<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类型的数组的指针,看过这个的人,很快就能找出 上述出错的解决方法!

 

posted @ 2017-08-12 16:48  颜小雀  阅读(149)  评论(0编辑  收藏  举报