社区
C语言
帖子详情
关于 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*)这种类型!
...全文
592
17
打赏
收藏
关于 char* p和 char *p,困惑,求解释
一般定义一个指针类型变量的时候习惯有两种写法 char* p; //char *p; 第一种写法和第二种写法的人应该是站在不同的角度去理解的,第一种写法的人把char*看成了一种类型,但是实际上我们把*看做一个单目运算符,那么不管哪种写法,*都应该是先跟p结合,即定义一个字符指针的时候实际上是 char (*p), 但是char*的确是一种类型,因为强制转换的时候有:int *p = (char*)q,那么定义的时候到底是怎么一回事,从结合方法上看,根本就没出现(char*)这种类型!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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也是指针
C/C++的
char
*到底是个什么东西——
char
*的内存占用与用法
本文深入解析C/C++中的
char
*概念,探讨其内存占用、用法及潜在陷阱。从栈区与堆区的区别,到字符串常量与动态分配的处理方式,再到strcpy函数的安全使用,全面覆盖
char
*在程序中的应用细节。
c++中const的详细用法和const
char
*,
char
const*,
char
*const的区别,const和define宏定义的区别
本文深入解析C++中const关键字的用法,包括const与指针、变量、函数参数及返回值的关系,以及const
char
*、
char
const*、
char
*const的区别。通过实例,帮助读者理解const修饰不同类型的作用。
C语言的指针详解,单指针,双重指针(
char
*和
char
**)
本文深入探讨了C语言中
char
*与
char
**的区别,详细
解释
了双重指针的概念及其实现原理,通过实例帮助读者理解如何使用双重指针。
C++ 中
char
\ 、const
char
\ 、
char
\ const、const
char
\ const 的区别:一篇彻底讲清指针与 const 的组合
本文系统解析C++中
char
*、const
char
*、
char
* const和const
char
* const四种声明的本质区别,核心围绕两个问题:指针本身是否可修改、指向的内容是否可修改。通过‘从右往左读’的声明解析法则和const修饰规则(修饰左侧,无左侧则修饰右侧),厘清底层const与顶层const的语义差异,并涵盖函数参数设计、字符串字面量陷阱、typedef交互等实战要点,帮助开发者准确使用const限定符保障类型安全。
C++中
char
*传参的陷阱与最佳实践:从内存模型到现代安全编程
本文深入剖析C++中
char
*作为函数参数时的四大典型场景及其内存陷阱,重点阐释const
char
*的类型安全机制、值传递本质、二级指针与引用在指针修改中的应用,以及缓冲区大小校验的必要性。强调现代C++应优先采用std::string、std::vector<
char
>和智能指针替代裸
char
*,仅在C API交互等必要场景下谨慎使用,并通过调试工具与静态分析保障内存安全。
C语言
70,039
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章