auto类型定义多个变量时的指针类型推演
谢邀。在“初始值必须是同一种类型”的前面有句“符号\u0026amp;和*只从属于某个声明符,而非基本数据类型的一部分”。所以那句“初始值必须是同一种类型”是对某个具体的声明符号来说的,就是给它的初始值必须是跟它一样的类型。如果一行内有多个不同的声明符,初始值要根据不同的声明符号给出。所以是合法的。 ci是const int类型,所以语句 auto *p = \u0026amp;ci;进行的操作是把ci的地址给p,所以p指向的是整形常量的指针,而非指向整形常量指针的指针。如果再执行auto *p2 = \u0026amp;p;。那这样p2就是指向整形常量指针的指针。
■网友
既然说初始值必须是同一种类型,可是ci和\u0026amp;ci明明不是同一种类型啊! 这句是对的。上图:
【auto类型定义多个变量时的指针类型推演】
但是要注意这句话,切记,符号\u0026amp;和*只从属于某个声明符,而非基本数据类型的一部分虽然两者的类型不同,但基本数据类型是相同的,也就符合了那句,因此初始值必须是同一种类型继续回答你的问题。为什么合法?为什么p是指向整型常量的指针,而不是指向整型常量指针的指针?为什么auto被推演为 const int 所以表达式合法?为什么auto不是被推演为 const int* 然后表达式就不合法了呢?为什么合法已经解释过了。第二个问题建议你仔细看下指针怎么定义的,实际上这句话就是auto *p = \u0026amp;ci;和平常的定义没什么不同。在一条声明语句中只能有一个基本数据类型不是因为auto被推演为const int 所以表达式合法,而是为了满足auto始终被推断为同一个数据类型,表达式必须这么写。当你写成auto p = \u0026amp;ci;auto 就如愿的成为了const int*, 但是auto \u0026amp;m = ci;推断出来的是const int,两者不同,所以表达式不合法。如果单独定义 auto *p2 = \u0026amp;ci; 那么p2是不是就变为指向整型常量指针的指针了呢?是不是这里的auto就被推演为const int*了呢?这个就不用再解释了吧,:-D其实看书的时候,对着电脑码一下,调试一下,会有惊喜:-(逃
推荐阅读
- 怎样评价类似前橙会、百老汇、南极圈这样类型的离职帮抱团,对企业的积极意义和消极意义
- AutoLab|Lab测试:你以为奥迪A5就是你以为的“掀背版奥迪A4”?
- Auto实验室|三菱劲炫asx跌至8.98万,开5年不怕坏,2.0L+CVT,H6车主:买早了
- AutoNode|法拉第未来加入零排放运输协会(ZETA),呼吁加快向电动汽车过渡
- Auto实验室|捷豹XEL下探5万,速度与豪华并存,特点鲜明科技感十足
- 车市百晓生|拥出众实力方能定义市场 试驾吉利星瑞
- Auto实验室|探界者从18.4万跌至14.4万,跟丰田荣放、本田CRV叫板
- Auto实验室|大众迈腾下探至15万,尾部带字母,车长近4.9米,比雅阁靠谱
- AutoR智驾|2020年度三大豹变营销事件:它们成就2020汽车界教科书式营销
- 车评社Auto|车评社|吉利星瑞“千人交车”,只是一个开始!
