你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 2024|回复: 10

对于1月7日回答问题的探究(char* p和char *p的区别)

[复制链接]

74

主题

1368

回帖

194

蝴蝶豆

版主

最后登录
2020-5-12
发表于 2016-1-7 12:47:39 | 显示全部楼层 |阅读模式
本帖最后由 wolfgang2015 于 2016-1-7 12:50 编辑

既然说道数组指针、指针数据,看见坛主写道:指针数组:是一个数组,内部的成员都是指针。如:char* p [10];表示有10个数组成员,每个成员都是指向char*的指针。对于这个是char* p还是char *p特意还验证、求证了一下:char* pchar *p同样的意思,中间插入多少个空格都没有关系,甚至你换行写都没有问题,只要没有在行末尾添加行结束符“ ; ”,如:char* p;
char * p;
char *p;
char            *           p;
char
*
p;
以上几个定义都是一个意思, 但C的代码规范建议使用 char *p; *紧挨着p, 这样在阅读代码时让人更明确p是一个指针,为char型
数组也一样,如果要不一样的效果,需要使用圆括号,如:
char *p[100];指针数组
char (*p)[100];数组指针,括号的优先级较高,说明p是一个指针
仅以此帖特殊说明一下~~~

看个人习惯,建议最好将 *符号同变量放在一起char *p,便于代码检查;
如果出现 “char            *           p;”
或“  char
*
p;”纯粹是跟自己找别扭;

因为代码是写给自己(人)看的,机器是只认二进制代码不认ABCD的。代码写多了,你会发现良好的代码习惯比写代码经验可贵!
<
回复

使用道具 举报

307

主题

3125

回帖

0

蝴蝶豆

论坛元老

最后登录
2020-7-17
发表于 2016-1-7 16:01:24 | 显示全部楼层
养成写代码的好习惯,学习了
回复 支持 反对

使用道具 举报

47

主题

1636

回帖

7

蝴蝶豆

论坛元老

最后登录
2020-10-28
发表于 2016-1-7 17:00:40 | 显示全部楼层
本帖最后由 moyanming2013 于 2016-1-7 17:05 编辑

坛主好像是用了我的答案,连接:https://www.stmcu.org.cn/module/ ... amp;fromuid=3089512
,所以我说下这个问题。
1.对于char * p中*的位置的讨论还不如for循环体中大括号的位置的讨论重要和多。
2.对于空格在什么位置真的无关紧要,因为都在这一行里面(楼主给出的多个空格甚至回车,除了在C语言的某些大赛中用到,真没人这么用)。
3.对我来讲,我比较倾向于这种写法:char *p[10],之所以有原帖中的写法,真是为了赶时间写成那样的。不过因此能有人讨论这个话题,也算是好事一件。
回复 支持 反对

使用道具 举报

74

主题

1368

回帖

194

蝴蝶豆

版主

最后登录
2020-5-12
 楼主| 发表于 2016-1-7 18:22:57 | 显示全部楼层
本帖最后由 wolfgang2015 于 2016-1-7 18:28 编辑

对于答案的正确与否一事,我真的没有针对某人,就事轮事而已,兄台请勿对号入座.......

你说的是代码风格哇?
至于写成这样
For(;;){
.....
}
还是写成
For(;;)
{
}
真的没有必要要求,因为有些IDE可以优化,比如Eclipse,设定好代码风格,看不习惯就 Ctrl+shift+F 按照设置的风格快速格式化,不影响阅读的。

本贴主要想说指针变量的考究,既然存在 类型 *变量[数组]与  类型 (*变量)[数组]的差别如此之大;
那么编译器对于*靠近变量还是 *靠近类型有否有所要求进行考究而已,结果均可,皆大欢喜。

考究一下可以说是对C语言编译器词法解析器的验证罢了(瞬间高上大了)~~~
回复 支持 反对

使用道具 举报

47

主题

1636

回帖

7

蝴蝶豆

论坛元老

最后登录
2020-10-28
发表于 2016-1-7 18:36:41 | 显示全部楼层
wolfgang2015 发表于 2016-1-7 18:22
对于答案的正确与否一事,我真的没有针对某人,就事轮事而已,兄台请勿对号入座.......

你说的是代码 ...

括号在C语言中有改变优先级的作用,所以加括号与不加括号当然有差别。
空格只是起到分隔的作用,没有优先级等其它作用,所以无论空格怎么加对于上述无影响,无非就是编程习惯的问题而已。
回复 支持 反对

使用道具 举报

12

主题

484

回帖

111

蝴蝶豆

金牌会员

最后登录
2020-6-12
发表于 2016-1-7 20:28:50 | 显示全部楼层
怎么写就看个人习惯了,我比较喜欢char* p
回复 支持 反对

使用道具 举报

74

主题

1368

回帖

194

蝴蝶豆

版主

最后登录
2020-5-12
 楼主| 发表于 2016-1-7 22:28:38 | 显示全部楼层
本帖最后由 wolfgang2015 于 2016-1-7 22:45 编辑
moyanming2013 发表于 2016-1-7 18:36
括号在C语言中有改变优先级的作用,所以加括号与不加括号当然有差别。
空格只是起到分隔的作用,没有优先 ...

好,说道优先级说实话这还真的需要仔细探究。

char *p => 声明一个指向char类型的指针p
(char*) p => 将p强行转换成指向char类型的指针

如果忽略优先级。或者对C语言优先级的认识模糊,那么
char* P 是不是容易给人错误理解为:(char*)  P 呢?
要知道  void fun(char *p)  与 void fun((char*) P)  程序识别不一样的
void fun(char *p) 不会报错
void fun((char*) P) 系统会报错




回复 支持 反对

使用道具 举报

74

主题

1368

回帖

194

蝴蝶豆

版主

最后登录
2020-5-12
 楼主| 发表于 2016-1-7 22:32:47 | 显示全部楼层
yu0405jie 发表于 2016-1-7 20:28
怎么写就看个人习惯了,我比较喜欢char* p

不是我就接这个小小的空格,编程的语言是哪来人理解的,写法不同会造成不同人的理解认识错误,虽然编译器的词法解析能够兼容,但并非收有人都能认识到词法分析兼容层面,代码更多是需要人阅读和理解的。
回复 支持 反对

使用道具 举报

2

主题

37

回帖

0

蝴蝶豆

初级会员

最后登录
2016-4-21
发表于 2016-1-16 11:08:44 | 显示全部楼层
刚好前几天有这个疑问,又查了下C语言,学习了。
回复 支持 反对

使用道具 举报

0

主题

1277

回帖

30

蝴蝶豆

金牌会员

最后登录
2020-7-4
发表于 2016-1-17 21:51:28 | 显示全部楼层
学习ing。。。。。。。。。。
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版