C多个单行声明

时间:2010-07-14 13:54:22

标签: c variables declaration

当我在单行上声明多个变量时会发生什么? e.g。

int x, y, z;

所有都是整体。问题是以下陈述中的y和z是什么?

int* x, y, z;

它们都是int指针吗?

4 个答案:

答案 0 :(得分:60)

只有x是指向int的指针; yz是常规的。

这是C声明语法的一个方面,可以帮助一些人。 C使用声明符的概念,它引入了声明的事物的名称以及类型说明符未提供的其他类型信息。在声明中

int* x, y, z;

声明者是*xyz(您可以编写int* xint *x,这是C语法的意外,这是问题是我推荐使用第二种风格的几个原因之一)。 xyz的内容由类型说明符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的指针。 yzint个。{/ 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声明为整数。