【问题标题】:C multiple single line declarationsC 多单行声明
【发布时间】:2010-07-14 13:54:21
【问题描述】:

当我在一行上声明多个变量时会发生什么?例如

int x, y, z;

都是整数。问题是以下语句中的 y 和 z 是什么?

int* x, y, z;

都是int指针吗?

【问题讨论】:

  • 已编辑问题,因为它与 Objective C 无关
  • 我知道这里的某个地方有一个重复的问题(我以前肯定读过这个)

标签: c variables declaration


【解决方案1】:

只有x 是一个指向int 的指针; yz 是常规整数。

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

int* x, y, z;

声明符是 *xyz(这是 C 语法的一个意外,您可以编写 int* xint *x,这个问题是我推荐使用的几个原因之一第二种风格)。 xyz 的 int 性由类型说明符 int 指定,而 x 的指针性由声明符 *x 指定(IOW,表达式 @ 987654336@ 的类型为 int)。

如果您希望所有三个对象都是指针,您有两个选择。您可以将它们显式声明为指针:

int *x, *y, *z;

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

typedef int *iptr;
iptr x, y, z;

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

【讨论】:

  • 真正的完整答案以及 * 是用于类型还是变量的基本问题。
【解决方案2】:

在你的第一句话中:

int x, y, z;

他们都是ints。

但是,在第二个中:

int* x, y, z;

只有x 是指向int 的指针。 yz 是普通的 ints。

如果您希望它们都指向ints,您需要这样做:

int *x, *y, *z;

【讨论】:

  • 这是间距int* foo; 确实被误导的原因之一。在这个问题的示例中,这使得 3 个变量看起来都是“int*”类型。我想说这个间距几乎和a+b * c 一样令人反感。
【解决方案3】:

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

int * x, * y, * z;

【讨论】:

    【解决方案4】:

    重要的是要知道,在 C 中,声明模仿用法。 * 一元运算符在 C 中是右结合的。因此,例如在int *x 中,x 是指向 int(或 int-star)的类型指针,而在 int x 中,x 是 int 类型。

    正如其他人也提到的,在int* x, y, z; 中,C 编译器将 x 声明为 int-star,并且将 y 和 z 声明为整数。

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 2012-09-14
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      相关资源
      最近更新 更多