wolfgang2015 发表于 2016-1-7 12:47:39

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

本帖最后由 wolfgang2015 于 2016-1-7 12:50 编辑

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

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

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

沐紫 发表于 2016-1-7 16:01:24

养成写代码的好习惯,学习了:)

moyanming2013 发表于 2016-1-7 17:00:40

本帖最后由 moyanming2013 于 2016-1-7 17:05 编辑

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

wolfgang2015 发表于 2016-1-7 18:22:57

本帖最后由 wolfgang2015 于 2016-1-7 18:28 编辑

moyanming2013 发表于 2016-1-7 17:00
坛主好像是用了我的答案,连接:https://www.stmcu.org.cn/module/forum/forum.php?mod=redirect&goto=findpost ...
对于答案的正确与否一事,我真的没有针对某人,就事轮事而已,兄台请勿对号入座:lol.......

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

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

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

moyanming2013 发表于 2016-1-7 18:36:41

wolfgang2015 发表于 2016-1-7 18:22
对于答案的正确与否一事,我真的没有针对某人,就事轮事而已,兄台请勿对号入座.......

你说的是代码 ...

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

yu0405jie 发表于 2016-1-7 20:28:50

怎么写就看个人习惯了,我比较喜欢char* p

wolfgang2015 发表于 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) 系统会报错




wolfgang2015 发表于 2016-1-7 22:32:47

yu0405jie 发表于 2016-1-7 20:28
怎么写就看个人习惯了,我比较喜欢char* p

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

孤鸿踏雪遗梦 发表于 2016-1-16 11:08:44

刚好前几天有这个疑问,又查了下C语言,学习了。

zcl201207 发表于 2016-1-17 21:51:28

学习ing。。。。。。。。。。
页: [1] 2
查看完整版本: 对于1月7日回答问题的探究(char* p和char *p的区别)