
本帖最后由 wolfgang2015 于 2016-1-7 12:50 编辑 既然说道数组指针、指针数据,看见坛主写道:“指针数组:是一个数组,内部的成员都是指针。如:char* p [10];表示有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[100];指针数组 char (*p)[100];数组指针,括号的优先级较高,说明p是一个指针 仅以此帖特殊说明一下~~~ 看个人习惯,建议最好将 *符号同变量放在一起char *p,便于代码检查; 如果出现 “char * p;” 或“ char * p;”纯粹是跟自己找别扭; 因为代码是写给自己(人)看的,机器是只认二进制代码不认ABCD的。代码写多了,你会发现良好的代码习惯比写代码经验可贵! |
坛主好像是用了我的答案,连接:https://www.stmcu.org.cn/module/ ... amp;fromuid=3089512
,所以我说下这个问题。
1.对于char * p中*的位置的讨论还不如for循环体中大括号的位置的讨论重要和多。
2.对于空格在什么位置真的无关紧要,因为都在这一行里面(楼主给出的多个空格甚至回车,除了在C语言的某些大赛中用到,真没人这么用)。
3.对我来讲,我比较倾向于这种写法:char *p[10],之所以有原帖中的写法,真是为了赶时间写成那样的。不过因此能有人讨论这个话题,也算是好事一件。
对于答案的正确与否一事,我真的没有针对某人,就事轮事而已,兄台请勿对号入座
你说的是代码风格哇?
至于写成这样
For(;;){
.....
}
还是写成
For(;;)
{
}
真的没有必要要求,因为有些IDE可以优化,比如Eclipse,设定好代码风格,看不习惯就 Ctrl+shift+F 按照设置的风格快速格式化,不影响阅读的。
本贴主要想说指针变量的考究,既然存在 类型 *变量[数组]与 类型 (*变量)[数组]的差别如此之大;
那么编译器对于*靠近变量还是 *靠近类型有否有所要求进行考究而已,结果均可,皆大欢喜。
考究一下可以说是对C语言编译器词法解析器的验证罢了(瞬间高上大了)~~~
括号在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) 系统会报错
不是我就接这个小小的空格,编程的语言是哪来人理解的,写法不同会造成不同人的理解认识错误,虽然编译器的词法解析能够兼容,但并非收有人都能认识到词法分析兼容层面,代码更多是需要人阅读和理解的。
char (*p)[100];数组指针,括号的优先级较高,说明p是一个指针
()和[]的优先级是一样高的,只是因为()在左边,所以先做运算