社区
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*)这种类型!
...全文
584
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
*到底是个什么东西——
char
*的内存占用与用法为什么要写这篇前置知识——程序运行时的内存使用情况
char
*是什么
char
*的用法 首先声明,写这个之前看了一些博客,这篇对我的帮助最大,感谢这位博主:https://blog.csdn.net/yahohi/article/details/7427724 为什么要写这篇 最近在写C++作业的时候要写一个Person类,在名字输入...
c++中const的详细用法和const
char
*,
char
const*,
char
*const的区别,const和define宏定义的区别
const的详细用法和const
char
*,
char
const*,
char
*const的区别,const和define宏定义的区别 一个电脑小白的自我成长之路,*_^ 下面的代码中编译器会报一个错误,你知道是哪个语句错了吗? ```cpp typedef
char
* pStr;
char
string[4] = "abc"; const
char
*p1 = string; const pStr p2 = string; p1++; p2++; 是p2++出错了。这个问题提醒我们:typedef
C语言的指针详解,单指针,双重指针(
char
*和
char
**)
最近在学习的过程中碰到了
char
**,突然发现关与一指针的概念很模糊,所以温习了一下
char
* 和
char
** 之间的联系
char
*定义的式一个字符型指针
char
** 定义的是一个双重指针 让我
困惑
的也就是双重指针 下面的图
解释
一下 指针变量地址双重指针1指针2地址变量地址 对于定义的单指针变量" p1 "里的值是变量 " i “的地址,即 p1=&i
char
*p[] 和
char
**的思考
char
*p[] = {"hello","world"};
char
**pp; pp = p; printf("%s,%s\n",*pp, *(pp+1)); printf("%p\n", &pp); return 0; 郁闷了很长时间一件事:第4行*pp代表的应该是f750的值:8758。我就是挺郁闷的:为什么printf("%...
C++中
char
*传参的陷阱与最佳实践:从内存模型到现代安全编程
在C++和C语言编程中,指针是理解内存模型和数据传递机制的核心概念。指针本质上是一个存储内存地址的变量,通过值传递时,传递的是地址副本而非原始指针本身,这直接影响了函数内对数据的修改能力。理解这一原理对于编写安全、高效的底层代码至关重要,尤其是在处理字符串、内存操作以及与C语言库交互时。从技术价值看,正确处理指针传参能避免内存泄漏、缓冲区溢出和未定义行为,提升代码的健壮性和可维护性。常见的应用场景包括只读访问、内容修改、动态内存分配和固定缓冲区操作。本文聚焦于
char
*传参这一典型问题,通过分析const
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章