#include <stdio.h>
int array[5][5] = {0}; //定义一个二维数组
int *magic() //返回值为整型指针
{
int y = 0;
int x = 0;
int k;
for (x = 0; x < 5; x++)
{
for (y = 0; y < 5; y++)
{
array[x][y] = k++;
}
putchar('\n');
}
return array;
}
产生错误的代码如上
报错解释:返回一个不兼容的指针类型
这意味着定义的返回值和return的返回值类型不一样
定义的返回值为一个指向整型变量的指针
但return的返回值是数组名array,即二维数组第一个“元素”的首地址,二维数组的第一个元素其实是一个含五个元素的数组,故array其实是一个指针,但是指向的是一个含五个元素的数组。
故应该修改定义的返回值为数组指针
故函数定义应如下
int (*magic(int num)) [5]
注意:int (*p)[5] magic(int num)的定义是错的,编译器无法理解
正确思路应从运算符的优先级来看
int (*magic(int num)) [5]
magic先被定义成一个函数magic(int num),那函数返回值是什么?去掉magic(num)剩下的就是返回值:int(*)[5]
故至此,修改完成!