在C中,将*放在指针变量声明中的位置是否重要?

时间:2011-11-17 02:56:54

标签: c pointers

  

可能重复:
  In C, what is the correct syntax for declaring pointers?

当我阅读C代码时,我看到了几种编写指针的方法,比如

int *p;
char * s;
char * d = &c;
ll_model* model = new_ll_model(n, cc->term); 
double* avg_ll;

我的问题是:

  1. 他们之间有什么不同吗?

  2. 如果有,有什么区别?也就是说,空格和*的位置是什么意思?

  3. 哪种方式是编写指针的正确方法,因此我自己和任何其他将阅读我的代码的人都可以阅读

4 个答案:

答案 0 :(得分:2)

功能上,没有。你可以阅读:

int *p;

as“ p指向的内容是int ”和

double* avg_ll

as“ avg_ll的类型是指向double 的指针。” AFAIK,前者是首选的C风格,后者在C ++代码中更为普遍。

然而,作为C FAQ explains,如果您习惯在单个语句中声明多个变量,则后一种风格可能会导致错误。

答案 1 :(得分:0)

您发布的代码行之间存在很多差异,但它们都与您声明指针类型的方式无关。

空白并不重要。

可见的是在旁观者的眼中。我更喜欢在*字符之前和之后放置一个空格字符。

答案 2 :(得分:0)

答案

  1. 是的,由于类型不同,它们是不同类型的指针
  2. 白色空间没有区别 - 差异用于指针算术。如果你增加一个char *它会将指针移动1个字符。如果你增加一个int *,它会在指针上移动大小为1 int
  3. 我更喜欢char * foo风格 - 但我现在的风格有点老了

答案 3 :(得分:0)

基本上,它们之间没有区别。

但我更喜欢这种方法:

int *p;

而不是:

int* p;

int * p;

原因是因为如果你想在同一行中声明一些int *,那么将*放在标识符旁边而不是类型更有意义,因为它看起来更干净而不那么混乱。 e.g。

int *p, *q, *r;

优于:

int* p, *q, * r;

如果您不喜欢我的理由,请确保坚持其中一个并且不要改变用法。