当我在单行上声明多个变量时会发生什么? e.g。
int x, y, z;
所有都是整体。问题是以下陈述中的y和z是什么?
int* x, y, z;
它们都是int指针吗?
答案 0 :(得分:60)
只有x
是指向int的指针; y
和z
是常规的。
这是C声明语法的一个方面,可以帮助一些人。 C使用声明符的概念,它引入了声明的事物的名称以及类型说明符未提供的其他类型信息。在声明中
int* x, y, z;
声明者是*x
,y
和z
(您可以编写int* x
或int *x
,这是C语法的意外,这是问题是我推荐使用第二种风格的几个原因之一)。 x
,y
和z
的内容由类型说明符int
指定,而x
的指针指定由*x
指定。声明者*x
(IOW,表达式int
的类型为int *x, *y, *z;
)。
如果你想让所有三个对象成为指针,你有两个选择。您可以明确地将它们声明为指针:
typedef int *iptr;
iptr x, y, z;
或者你可以为int指针创建一个typedef:
*
请记住,在声明指针时,{{1}}是变量名称的一部分,而不是类型。
答案 1 :(得分:8)
在你的第一句话中:
int x, y, z;
他们都是int
s。
然而,在第二个:
int* x, y, z;
只有x
是指向int
的指针。 y
和z
是int
个。{/ p>
如果您希望它们全部成为int
的指针,您需要这样做:
int *x, *y, *z;
答案 2 :(得分:7)
只有x是一个int指针。 Y和Z将只是int。 如果你想要三个指针:
int * x, * y, * z;
答案 3 :(得分:3)
重要的是要知道,在C中,声明模仿用法。 *一元运算符在C中是右关联的。因此,例如在int *x
中x是指向int(或int-star)的类型指针,而在int x
中,x是int类型。
正如其他人所提到的,在int* x, y, z;
中,C编译器将x声明为int-star,将y和z声明为整数。