什么是void *和void之间的区别*

时间:2012-07-17 10:22:37

标签: c++ pointers

  

可能重复:
  In C, why is the asterisk before the variable name, rather than after the type?
  Declaring pointers; asterisk on the left or right of the space between the type and name?

我一直在使用指针一段时间,并用于声明像

这样的指针
int *x;

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

void* setValue(){
 /*          */
}

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

5 个答案:

答案 0 :(得分:12)

语义上没什么。这是风格。

将星形放在变量旁边的优点是防止了这个常见错误:

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

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

此问题与返回类型不存在,所以更重要的是那里。

答案 1 :(得分:2)

没有区别,在某些情况下,最好将它保持在正确的位置:

int* p1,p2;

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

int *p1,p2;

现在它看起来好一点,但好的风格是将它拆分为单独的行:

int *p1;
int p2;

答案 2 :(得分:2)

它与a+ba + b之间的差异完全相同 - 也就是说,没有区别。空格毫无意义,除非需要分隔标记。

答案 3 :(得分:1)

没有语义差异。

通常建议您将*放在该类型的旁边,因为x的实际类型为void *。然而,这在语法上是错误的,因为C / C ++将星形绑定到变量名称。

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

我个人试着让*保持在中间

int * x;

答案 4 :(得分:0)

指向void的指针,标记为void*是一个通用的不透明指针。你可以传递它(作为参数,结果,通过变量,字段......)并比较它,但获取指向数据的唯一方法是适当地转换它。不合适的演员表是未定义的行为,可能会导致程序崩溃。

对于*表示类型中的指针之前或之后的空间,它是一种风格的东西。空格并不重要,除了标记分隔符(*本身就是一个标记)。

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