返回信息流下面这段,编译器报错
```C
const int a[2][2]{ {1, 2},{ 2,3 } };
const int(*)[2] get_a(){
return a;
}
```
将返回类型改成尾置返回类型后就可以编译通过了
```C
const int a[2][2]{ {1, 2},{ 2,3 } };
auto get_a() ->const int(*)[2]{
return a;
}
```
百思不得其解,求大神解惑
这是一条镜像帖。来源:北邮人论坛 / cpp / #94586同步于 2017/2/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
一个无聊的问题
liuyehcf
2017/2/25镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
谢暖神~明白原因了
【 在 nuanyangyang 的大作中提到: 】
: [code=c]
: const int (*get_a())[2] {
: return a;
: ...................
大概是语法问题?
定义如下指针:
int (*p)[2];
变量p的类型解析顺序为:
1、首先找到变量p
2、*:指针类型,p为指针
3、[]:数组,指针指向的元素类型为数组
4、int:整型,数组中存放的元素是int
由于解析顺序并非从右到左,因此必须把p放到括号中来
因此不能这样写:
int (*)[2] p;//错误语法
同理,若函数返回类型为:指向数组类型的指针
则函数声明应该这样写:
int (*f())[2];
而不能这样写:
int (*)[2] f();
【 在 nuanyangyang 的大作中提到: 】
: 咦?什么原因呀?
其实就是语法。(int(*)[])这种语法只能用于强制类型转换,以及其它某些地方。
在定义新对象、新函数,以及typedef的时候,都要用int(*my_identifier)[]这种语法。
具体的还是看C/C++语言语法吧。