社区
C++ 语言
帖子详情
C编译器的类型推导问题? 大虾指教!
LaoPoZaiNa
2008-03-09 10:26:07
下面的两句很好懂,
int *a[8](); //类型1
int *[8]a(); //类型2
但下面这句编译器是把b转换成“类型1”还是“类型2”呢,编译器到底是怎么推断出下面这句的类型的?
(int *[8]())b;
小弟困扰好久了,希望大虾指教!
...全文
213
11
打赏
收藏
C编译器的类型推导问题? 大虾指教!
下面的两句很好懂, int *a[8](); //类型1 int *[8]a(); //类型2 但下面这句编译器是把b转换成“类型1”还是“类型2”呢,编译器到底是怎么推断出下面这句的类型的? (int *[8]())b; 小弟困扰好久了,希望大虾指教!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
taodm
2008-03-10
打赏
举报
回复
楼主啊,你这个代码能编译通过么?
如果都没先自己编译一下,就来发贴的话,就只能算你自己的态度问题了。
NaiNaiGeXiong
2008-03-09
打赏
举报
回复
什么嘛?两个都不是合法的类型!
第一句:从紧贴变量的右边看起,[8]表示变量是有8个元素的数组,由于[8]的右边又有一个(),()表示函数,但C语言没有函数类型,但有函数指针类型,所以数组元素不能是函数类型,但可以是函数指针类型,所以这句编译器会报错!直到变量名的右边没有东西了或到了限制运算顺序的")"时,才能看变量名的左边,在这句中,左边是* ,"*"表示指针,猜楼主的意思是要表达:int (*a[8])(); 加上限制顺序的圆括号就对了,表示a是有8个元素的数组,这个数组的元素的类型是指针型的,这类指针指向函数,被指向的函数是这样的:函数没有参数,返回值是int 。
第二句:a的右边是(),表示a是个函数,接着a的右边没有东西了,就要转到a的左边看了,a的左边是[8],问题就出在这,由于C语言的类型声明方式是与存取方式一致的,我们在存取数组时没有[8]在变量名之前的情况出现吧,[8]只会出现在变量名的右边,所以这句也是不正确的类型声明。也就是说:在声明时,[]()等运算运符不会出现在变量名的左边,即使是用来限制运算顺序的()符,变量名也只会在"(" 和 ")"两个括符之间。我猜楼的意思是:int (*(*b)[8])(); 这个表示:b是一个指针,指向数组,数组的样子是:有8个元素,元素的类型又是一个指针,元素中的指针指向函数,函数没有参数,返回值为int 。
星羽
2008-03-09
打赏
举报
回复
int *a[8](); //类型1
int *[8]a(); //类型2
这两个是什么东西,编译不认的
Treazy
2008-03-09
打赏
举报
回复
看不懂~~~
独孤过儿
2008-03-09
打赏
举报
回复
去看运算符的优先级!!!
ttkk_2007
2008-03-09
打赏
举报
回复
第一个去掉括号我懂,你写的我不懂,第二个我更不懂,你给讲讲
LaoPoZaiNa
2008-03-09
打赏
举报
回复
都是中国人,怎么看不懂?
我啃
2008-03-09
打赏
举报
回复
int *a[8](); //类型1
int *[8]a(); //类型2
这些都是合法类型?
dulinbo
2008-03-09
打赏
举报
回复
你写的别人都看不懂,人家怎么给你讲呢
LaoPoZaiNa
2008-03-09
打赏
举报
回复
怎么?大虾们只会讥讽入门的人吗?一句“看不懂……”就完了,现在不要你们讲了,你们说下有哪本书(薄一点、便宜点的)讲了这些内容就行了,我自己看行吧,怪不得说中国对“开源社区”贡献少……原来大虾们的态度都不端正……无语!
LaoPoZaiNa
2008-03-09
打赏
举报
回复
呜……还是昏昏的,哪本书上有讲这些内容呀,我得弄本来看看?
matlab找不到
编译器
的
问题
matlab在关联
编译器
的时候,会出现找不到
编译器
的
问题
,原因是matlab要找windows sdk的mt.exe,找不到报错的.因为vs2012在安装时,windows sdk的mt.exe位置变了,而matlab还是按照老的路径找,肯定找不到(原来在windows sdks下面,现在在windows kits下面). 如果你的环境是64位windows,并且vs2012装在默认目录下,matlab是64位版本,那么直接使用附件的文件,把他们添加到matlab/bin/win64下面的相关目录下即可,一个4个文件,放在2个目录. 如果你的vs目录不是默认的,或者是32位版本,或者vs版本不是2012,那么需要修改附件里面的相关目录的设置(其实就是cl.exe和mt.exe的目录位置), 我修改的方法是直接设置成目标目录(默认安装的位置),不是读注册表,这样简单,也无需修改注册表,以及建立什么目录链接(mklink).当然如果你的mt.exe目录不在Windows kits下,那需要修改附件的文件. 附件里有一个word文件,是我修改的标识,当做帮助来用. 使用方法, 1 把附件相关的4个文件添加到matlab/bin/win64下面的2个相关目录 2 在matlab 里面运行 mbuild -setup, 然后选 y, 再选择2012的那个项目,再选y 3 这是应该成功了 4 mex -setup也是一样的. 有一个奇怪的情况,就是.stp文件必须直接修改,我在桌面修改,然后覆盖到matlab目录后,其实并没有覆盖,还是原来的文件. 修改时要注意.
初窥C++11:自己主动
类型
推导
与
类型
获取
auto 话说C语言还处于K&R时代,也有auto a = 1;的写法。中文译过来叫自己主动变量。跟c++11的不同。C语言的auto a = 1;相当与 auto int a = 1;语句。 而C++11的auto是有着严格的
类型
推导
出来的。曾经是这么写 int a = 1; 如今,
编译器
知道a是int型了。所以能够这么写 auto a = 1; 对于
类型
比?长的,如vector
::iterator这类的,能少敲些字符了。 假设只这点作用。那么对编程实在没什么太大的益处。尽管自己主动
类型
推导
对于
编译器
而言,是个高大上的话题。实际上,作用远远
pl/0
编译器
源码及文档
用C语言写的pl/0
编译器
,其中包含很多设计资料,对于编译原理的理解很有帮助,希望对大家有帮助。
Keil C51
编译器
在Keil u4 for ARM 下增加 C51支持的扩展包
小型Pascal
编译器
带源程序的免费软件小型Pascal
编译器
C++ 语言
65,060
社区成员
250,533
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章