auto类型定义多个变量时的指针类型推演

谢邀。在“初始值必须是同一种类型”的前面有句“符号\u0026amp;和*只从属于某个声明符,而非基本数据类型的一部分”。所以那句“初始值必须是同一种类型”是对某个具体的声明符号来说的,就是给它的初始值必须是跟它一样的类型。如果一行内有多个不同的声明符,初始值要根据不同的声明符号给出。所以是合法的。 ci是const int类型,所以语句 auto *p = \u0026amp;ci;进行的操作是把ci的地址给p,所以p指向的是整形常量的指针,而非指向整形常量指针的指针。如果再执行auto *p2 = \u0026amp;p;。那这样p2就是指向整形常量指针的指针。
■网友
既然说初始值必须是同一种类型,可是ci和\u0026amp;ci明明不是同一种类型啊! 这句是对的。上图:auto类型定义多个变量时的指针类型推演
【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其实看书的时候,对着电脑码一下,调试一下,会有惊喜:-(逃


    推荐阅读