prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 1.5

Q这个声明有什么问题?

char* p1, p2;
当我尝试使用p2.


A声明本身没有问题——除了它可能不像您期望的那样工作。声明中的*不属于基本类型;它属于包含被声明名称的声明符(参见问题1.21)。也就是说,在 C 语言中,声明的语法和解释实际上不是

	type identifier ;
而是
	base_type thing_that_gives_base_type ;
其中“给出基本类型的东东”——即声明符——要么是一个简单的标识符,要么是像*pa[10]f()这样的表示,表明被声明的变量是指向、数组或函数返回该基本类型。(当然,也可能存在更复杂的声明符。)

在问题中的声明里,无论空格如何暗示,基本类型都是char第一个声明符是“* p1”,因为声明符包含一个*,它声明p1为指针-到-char。然而,对于p2的声明符只包含p2,所以p2被声明为一个普通的char,这可能不是预期的。要声明两个指针在同一个声明中,请使用

	char *p1, *p2;
由于*是声明符的一部分,所以最好使用空格,如所示;写char*会招致错误和混淆。

另请参见问题1.13

其他链接:Bjarne Stroustrup 的观点


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管