1.5 指针声明
问:这样的声明有什么问题?
char *p1, p2;
我在使用p2的时候报错了。
答:这样的声明没有任何问题,但它可能不是你想要的。指针声明中的*号并不是基本类型的一部分,它只是包含被声明标识符的声明符的一部分。也就是说,在C语言中,声明的语法和解释并非
类型 标识符
而是
基本类型 生成基本类型的东西
其中“生成基本类型的东西”——声明符——或者是一个简单的标识符,或者是如图*p、a[10]或f()这样的符号,表明被声明的变量是指向基本类型的指针、基本类型的数组或返回基本类型的函数。
在问题里面的声明中,无论空白的位置暗示了什么,基本类型都是char,而第一个声明符是“*p”。因为声明符里面带有 * 号,所以表明这是一个指向char类的指针。而p2的声明符却只有p2,因此p2被声明成了普通的char变量。这可能并非你所希望。在一行代码中声明两个指针,可以使用如下的方式:
char *p1, *p2;
因为 * 号是声明符的一部分,所以最好像上面这样使用空白;写成 char* 往往会导致错误和困惑。
版权声明:本文为weixin_48232848原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。