把星放在哪里用C和C++指针表示法

Mar*_*sen 24 c c++

可能重复:
在C/C++中声明指针变量的正确方法

一段时间以下一直困扰着我,我应该把星星放在我的指针表示法中.

int *var; // 1
Run Code Online (Sandbox Code Playgroud)

int* var; // 2
Run Code Online (Sandbox Code Playgroud)

显然做同样的事情,两个符号都是正确的,但我发现我看的大多数文献和代码都使用第1种符号.

使用第二种表示法,用空格分隔类型和变量名称,而不是混合类型和变量标记,这不是更"正确"吗?

Pet*_*ker 20

没有永不. <g>

但考虑一下:

int* var1, var2;
Run Code Online (Sandbox Code Playgroud)

在此,所谓的安置*是一种误导,因为它并没有应用到var2,这是一个int,而不是一个int*.

  • 我所爱的语言并不是我想的干净美. (9认同)
  • @MartinKristiansen你会再次注意到十几次...... (7认同)

0x9*_*x90 13

Linux内核编码风格惯例是:

int *ptr1 , *ptr2;
Run Code Online (Sandbox Code Playgroud)

所以我认为你应该把它作为你的惯例.

声明指针数据或返回指针类型的函数时,首选使用*是与数据名称或函数名称相邻,而不是与类型名称相邻.例子:

char *linux_banner;
unsigned long long memparse(char *ptr, char **retptr);
char *match_strdup(substring_t *s);
Run Code Online (Sandbox Code Playgroud)


Pet*_*ter 10

我相信这种表示法的部分原因是变量的用法和声明看起来相似.

int *var;
int x;
x = *var;
Run Code Online (Sandbox Code Playgroud)

您也可以将其视为解除引用var会给您一个int.

  • 我认为这是正确的理由。“ *”和“&”用于不是定义或声明的语句中的标识符。x = * var表示将从var取消引用的事物分配给x,类似地,int * var表示“ var取消引用的事物为int类型”。 (2认同)
  • 我认为 `int *p;` 因为 `*p` 是 `int` 类型。不过,当你考虑可以像“int foo=42;”这样初始化“p”时,这很奇怪。int *p = &amp;foo;` 这里 `int* p = &amp;foo;` 对我来说更有意义。 (2认同)