- 论坛徽章:
- 0
|
>> 请问如何返回一个二维数组?
在 C 语言中,return 一个非 void 类型的表达式其实是一种传值的方式。
数组是一种特殊的数据类型,对数组对象进行求值得到的是指向第一个元素的指针,所以对于数组有一些操作上的限制,例如不能直接进行拷贝(数组只能逐个元素或者逐个字节进行拷贝),不能对数组赋值(因为数组对象已经转换为一个指针值),等等。
因此,函数的返回值类型不能是数组类型。
对于数组的操作,其实都是通过指向其元素的指针来进行的(即使使用的是数组名,其实数组名一般也是作为指针来使用的)。
了解了以上两点,你应该放弃让函数返回一个数组类型的想法,可能你需要返回的是一个指针。
第二个问题:
- int* get( int a[5][5] )
- {
- return a[0]; // 还可以是:a[1], a[2], &a[3][4], ...
- }
- 或者
- typedef int (*PA5)[5];
- PA5
- get( int a[5][5] )
- {
- return a; // 还可以是:a+1, a+2, ...
- }
复制代码
至于到底返回什么,取决于你的需要。
>> 不可以定义成 int (*p)[m] ?
可以,但是函数的返回类型不能直接写为这样的类型,必须象上面那样借助于 typedef 来实现。这可能是为数不多的 typedef 不可或缺的地方。 |
|