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

时间:2011-04-08 03:38:44

标签: c

您能告诉我int* pint *p声明之间的区别吗?

5 个答案:

答案 0 :(得分:34)

没有区别

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

int *a, b;

明确声明int*int,而

int* a, b;

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

答案 1 :(得分: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会提供更清晰的类型分隔和以下标识符

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

答案 2 :(得分:3)

声明单个指针时,这两个声明是等效的。有关详细信息,请参阅link

答案 3 :(得分:0)

这两个声明是完全一样的!

答案 4 :(得分:0)

它们是相同的。第一个将p视为int *类型,第二个将*p视为int

第二个告诉您C声明如何工作:声明使用方式

Internet充斥着复杂的方法来解析诸如“顺时针/螺旋规则”和“正确规则”之类的声明。人们使简单的一种复杂化:为什么我们需要大声朗读这些类型?我们只需要知道如何使用它!

顺便说一句,第一个有时候会让你生气。考虑一下:

int* p, q;

您希望pq都变成int *,但不幸的是没有。

如果您写int *p, *q,事情会更简单。

无论如何,如果您坚持采用一种方法,都可以尝试一下。

typedef int* intp;
intp p, q;