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

查看: 2019|回复: 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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版