我使用指针已经有一段时间了,用来声明像这样的指针
int *x;
但是通过一些代码注意到, * 在某些情况下似乎在数据类型之后,比如
void* setValue(){
/* */
}
有什么区别以及为什么这样使用
我使用指针已经有一段时间了,用来声明像这样的指针
int *x;
但是通过一些代码注意到, * 在某些情况下似乎在数据类型之后,比如
void* setValue(){
/* */
}
有什么区别以及为什么这样使用
语义上没有。这是风格。
将星号放在变量旁边的好处是可以防止这种常见错误:
char* str1, str2;
/* str2 is a char, not char* ! */
char *str1, *str2;
/* ok */
这个问题在返回类型中不存在,所以它在那里更不重要。
没有区别,在某些情况下最好保持在右侧:
int* p1,p2;
看起来像 p1 和 p2 ara 指针,而只有 p1 是,
int *p1,p2;
现在它看起来好多了,但好的风格是将它分成单独的行:
int *p1;
int p2;
a+b
它与和之间的区别完全相同a + b
- 即没有区别。空格根本没有任何意义,除非需要分隔标记。
没有语义差异。
通常建议保留*
类型旁边的,因为真正的类型x
是void *
. 然而,这在语法上是错误的,因为 C/C++ 将星号绑定到变量名。
int *x, y; // declare one pointer to int x and one int y
就我个人而言,我尽量保持*
在中间
int * x;
指向 的指针void
,注意为void*
通用不透明指针。您可以传递它(作为参数、结果、通过变量、字段......)并进行比较,但获取指向数据的唯一方法是适当地转换它。不适当的强制转换是未定义的行为,可能会使您的程序崩溃。
至于*
类型中表示指针之前或之后的空格,它是一种样式。空格不是很重要,除了作为标记分隔符(并且*
本身就是一个标记)。
我强烈建议与间距保持一致。您可以使用诸如indent
缩进您的源代码之类的工具(并将-T
选项传递给它有助于很好地缩进类型名称)。GNUindent
工具正在对空间进行规范化,并且有许多选项可以调整其行为(您可以将它们放在一个.indent.pro
文件中)。对于 C++ 代码,请考虑使用astyle
而不是indent
.