C多个单行声明

rur*_*der 28 c variables declaration

当我宣布在一行上说多个变量时会发生什么?例如

int x, y, z;
Run Code Online (Sandbox Code Playgroud)

一切都是整体.问题是以下陈述中的y和z是什么?

int* x, y, z;
Run Code Online (Sandbox Code Playgroud)

它们都是int指针吗?

Joh*_*ode 60

只有x指向int的指针; y并且z是常规的.

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

int* x, y, z;
Run Code Online (Sandbox Code Playgroud)

声明者是*x,yz(这是C语法的意外,你可以写int* x或者int *x,这个问题是我建议使用第二种风格的几个原因之一).的整型岬x,yz由类型指定单元指定int,而指针岬x由声明符指定*x(IOW,表达*x具有类型int).

如果您希望所有三个对象都成为指针,那么您有两个选择.您可以明确地将它们声明为指针:

int *x, *y, *z;
Run Code Online (Sandbox Code Playgroud)

或者您可以为int指针创建一个typedef:

typedef int *iptr;
iptr x, y, z;
Run Code Online (Sandbox Code Playgroud)

请记住,在声明指针时,它*是变量名称的一部分,而不是类型.


Pab*_*ruz 8

在你的第一句话中:

int x, y, z;
Run Code Online (Sandbox Code Playgroud)

他们都是int.

但是,在第二个:

int* x, y, z;
Run Code Online (Sandbox Code Playgroud)

只是x一个指针int.y而且z很简单int.

如果你想让它们全部成为int你需要做的事情:

int *x, *y, *z;
Run Code Online (Sandbox Code Playgroud)

  • 这是间距`int*foo;`真的被误导的一个原因.在这个问题的例子中,它看起来像3个变量都是"int*`"类型.我会说这个间距几乎和'a + b*c`一样令人反感. (3认同)

Mac*_*ade 7

只有x是一个int指针.Y和Z将只是int.如果你想要三个指针:

int * x, * y, * z;
Run Code Online (Sandbox Code Playgroud)