int * p和int * p声明之间的区别

问题描述 投票:12回答:4

你能告诉我int* pint *p宣言之间的区别吗?

c
4个回答
34
投票

没有区别。

这是符号而非语义的问题。第二个是误导性较小,因为

int *a, b;

显然是宣布int*int,而

int* a, b;

看起来好像它正在宣布两个指针,当它真的像上面那样做。


17
投票

这是一个很好的问题。

  • int* p 被C ++程序员广泛使用 int* p, q错误地暗示pq都是指针(导致优先在两行上声明这一点,这也提高了分配时的可读性,并且更容易快速剪切/粘贴或评论特定的行/变量) int* p在视觉上将类型与标识符分开 *p然后毫不含糊地表明一个解除引用(假设你在你的二进制operator* ala 2 * 3周围放置空格) 在C ++中,...&x显然是在取一个地址而...& x必须声明一个引用变量,... & ...是按位AND运算符
  • int *p C程序员广泛使用 int *p, q清楚地反映p是一个指针和q没有。 int *p在视觉上将类型与标识符混淆 在视觉上无法区分指针解除引用(无论好坏)

类似地出现在函数声明中...

int* f(), g();  // declares int g();
int *h(), (*i)();  // i is pointer to function returning int
int *const*m(), n(); // m returns pointer to (const-pointer to int)
                     // n returns int

...但至少函数参数不能如此毛茸茸 - 类型规范在每个逗号分隔符后重新开始。

总而言之,如果您的编码样式/代码库在单行源代码上使用多个声明,则int *p会更好,否则int* p会提供更清晰的类型分隔和以下标识符。

尽管如此,人们的偏好主要取决于他们习惯的东西。


3
投票

声明单个指针时,这两个声明是等效的。有关这方面的更多信息,请参阅link


0
投票

那2个声明完全一样!

© www.soinside.com 2019 - 2024. All rights reserved.