关于 char* p和 char *p,困惑,求解释

crazyhzc 2011-09-17 12:59:43
一般定义一个指针类型变量的时候习惯有两种写法

char* p;
//char *p;

第一种写法和第二种写法的人应该是站在不同的角度去理解的,第一种写法的人把char*看成了一种类型,但是实际上我们把*看做一个单目运算符,那么不管哪种写法,*都应该是先跟p结合,即定义一个字符指针的时候实际上是 char (*p),
但是char*的确是一种类型,因为强制转换的时候有:int *p = (char*)q,那么定义的时候到底是怎么一回事,从结合方法上看,根本就没出现(char*)这种类型!

...全文
584 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
AndyZhang 2011-09-19
  • 打赏
  • 举报
回复
这叫规矩
crazyhzc 2011-09-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 frankhb1989 的回复:]

首先,看成运算符的观点是错的。
其次,在ISO C中这里的两种观点都存在。一种是declarator,*作为指针类型的声明语法的一部分(不是运算符);一种是type name,*作为指针类型表达的一部分。两种都是合理的。
习惯用法,如果能约定一行不声明一个以上的指针类型的对象,那么写成char* p;比较清楚;如果不能避免,那么还是写成char *p好了,免得char* p, q容易产生误导……
[/Quote]
那为什么定义的时候也可以写成 char (*p),而不能是(char *)结合在一起,还有好多定义容易混淆类型的问题我都把*看作一个单目运算符利用运算符的优先级的问题搞清楚定义的是什么类型,比如const char * p和数组指针,指针数组之类的。写成char* p只是为了方便理解类型,其实它和char *p还是一样的吧。
wizard_tiger 2011-09-18
  • 打赏
  • 举报
回复
两个写法都一样,个人更喜欢char *p;
绝伤残影 2011-09-18
  • 打赏
  • 举报
回复
还是写规范点好!
modicum_lf 2011-09-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mstlq 的回复:]
我喜欢用char *p

否则让新手看到我写的
char* p,q;
怕他们误会q也是指针
[/Quote]

++

typedef char* pchar;
pchar p,q; //p,和q都是字符指针。

#define char* pchar
pchar p,q;// 只有p 是字符指针,q 是字符!




xialeijie368 2011-09-17
  • 打赏
  • 举报
回复
又见幻上帝 标准帝[Quote=引用 11 楼 frankhb1989 的回复:]

首先,看成运算符的观点是错的。
其次,在ISO C中这里的两种观点都存在。一种是declarator,*作为指针类型的声明语法的一部分(不是运算符);一种是type name,*作为指针类型表达的一部分。两种都是合理的。
习惯用法,如果能约定一行不声明一个以上的指针类型的对象,那么写成char* p;比较清楚;如果不能避免,那么还是写成char *p好了,免得char* p, q容易产生误导……
[/Quote]
FrankHB1989 2011-09-17
  • 打赏
  • 举报
回复
首先,看成运算符的观点是错的。
其次,在ISO C中这里的两种观点都存在。一种是declarator,*作为指针类型的声明语法的一部分(不是运算符);一种是type name,*作为指针类型表达的一部分。两种都是合理的。
习惯用法,如果能约定一行不声明一个以上的指针类型的对象,那么写成char* p;比较清楚;如果不能避免,那么还是写成char *p好了,免得char* p, q容易产生误导。
对于C++来说,现在一般倾向于第一种,因为类型名的作用更普遍。
一席 Jack 2011-09-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mstlq 的回复:]
我喜欢用char *p

否则让新手看到我写的
char* p,q;
怕他们误会q也是指针
[/Quote]++
Pillar1986 2011-09-17
  • 打赏
  • 举报
回复
都一样,我习惯char* p=null;
「已注销」 2011-09-17
  • 打赏
  • 举报
回复
char *p
这种写法是标准的c写法,应该提倡。
dfatfat 2011-09-17
  • 打赏
  • 举报
回复
一样的,char *p 貌似好一点
工程师Max 2011-09-17
  • 打赏
  • 举报
回复
,第一种写法的人把char*看成了一种类型,但是实际上我们把*看做一个单目运算符,

谁说*在这是单目运算符,在此处*就代表一种类型,指针类型.
btloveet 2011-09-17
  • 打赏
  • 举报
回复
其实都一样的!写法是这样!没有为什么!
Gloveing 2011-09-17
  • 打赏
  • 举报
回复
都可以。。。
满衣兄 2011-09-17
  • 打赏
  • 举报
回复
我也喜欢写成char *p,但是公司规定要写成char* p
alcz2008 2011-09-17
  • 打赏
  • 举报
回复
都一样,貌似char *p更好点,毕竟直观,看个人爱好了。。。
mstlq 2011-09-17
  • 打赏
  • 举报
回复
我喜欢用char *p

否则让新手看到我写的
char* p,q;
怕他们误会q也是指针

70,039

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧