0

可能重复:
在 C 中,为什么星号在变量名之前,而不是在类型之后?
声明指针;类型和名称之间空格的左侧或右侧的星号?

我使用指针已经有一段时间了,用来声明像这样的指针

int *x;

但是通过一些代码注意到, * 在某些情况下似乎在数据类型之后,比如

void* setValue(){
 /*          */
}

有什么区别以及为什么这样使用

4

5 回答 5

13

语义上没有。这是风格。

将星号放在变量旁边的好处是可以防止这种常见错误:

char* str1, str2;
/* str2 is a char, not char* ! */

char *str1, *str2;
/* ok */

这个问题在返回类型中不存在,所以它在那里更不重要。

于 2012-07-17T10:23:20.297 回答
2

没有区别,在某些情况下最好保持在右侧:

int* p1,p2;

看起来像 p1 和 p2 ara 指针,而只有 p1 是,

int *p1,p2;

现在它看起来好多了,但好的风格是将它分成单独的行:

int *p1;
int p2;
于 2012-07-17T10:27:12.550 回答
2

a+b它与和之间的区别完全相同a + b- 即没有区别。空格根本没有任何意义,除非需要分隔标记。

于 2012-07-17T10:28:49.550 回答
1

没有语义差异。

通常建议保留*类型旁边的,因为真正的类型xvoid *. 然而,这在语法上是错误的,因为 C/C++ 将星号绑定到变量名。

int *x, y; // declare one pointer to int x and one int y

就我个人而言,我尽量保持*在中间

int * x;
于 2012-07-17T10:27:06.697 回答
0

指向 的指针void,注意为void*通用不透明指针。您可以传递它(作为参数、结果、通过变量、字段......)并进行比较,但获取指向数据的唯一方法是适当地转换它。不适当的强制转换是未定义的行为,可能会使您的程序崩溃。

至于*类型中表示指针之前或之后的空格,它是一种样式。空格不是很重要,除了作为标记分隔符(并且*本身就是一个标记)。

我强烈建议与间距保持一致。您可以使用诸如indent缩进您的源代码之类的工具(并将-T选项传递给它有助于很好地缩进类型名称)。GNUindent工具正在对空间进行规范化,并且有许多选项可以调整其行为(您可以将它们放在一个.indent.pro文件中)。对于 C++ 代码,请考虑使用astyle而不是indent.

于 2012-07-17T10:24:41.437 回答