关于C语言的指针,很多代码里都将 “*” 与变量名连在一起,比如 int *a ,这样做有什么典故么? 为什么不写作 int* a 也就是将“*”与类型连在一起?

2012-08-25 01:20:10 +08:00
 ant_sz
感觉*应该是和类型在一起的啊,比如我们可以先:
typedef int* int_ptr;

然后这么声明指针:
int_ptr a;

所以*应该是类型的一部分,int*是C当中与int相同地位的一种数据类型
这样连起来貌似容易理解一些。

其实我比较感兴趣的是,前一种做法有什么特殊原因么?有什么典故么?
求不吝赐教~
4730 次点击
所在节点    问与答
13 条回复
leiz
2012-08-25 01:46:02 +08:00
用的是*a,还是a?
lldong
2012-08-25 01:52:53 +08:00
一个好处可能是不会写出,`int* a, b;` 然后认为`b`也是一个指针;
skydiver
2012-08-25 02:51:44 +08:00
楼上正解
aaronmix
2012-08-25 02:56:09 +08:00
据我所知只是个人习惯而已,有的人理解起来觉得int *a比int* a更容易。在绝大部分编译器看来都是一样的。
21grams
2012-08-25 11:46:29 +08:00
我一直都写int* a,对我来说这更好理解。
像int *a,b; 这样的写法本身就应该避免。
io
2012-08-25 13:24:11 +08:00
可以这样解释,int表示引用一个函数/变量时返回的数据类型。如 int fun();int a;int *a; 不知道这样理解是否严谨
xatest
2012-08-25 13:30:44 +08:00
相反,我都写成int* a;
因为左边表示类型(指针也是类型),右边表示变量的名字(指针不是名字的一部分)。
同理引用也是int& a;
我从来不在一行内声明多个变量。
thinkinnight
2012-08-25 15:14:08 +08:00
主要是预防本来想定义两个指向int的指针a,b,也就是int *a, *b;但是在写的时候写成int* a, b;
此时b就是int类型,而不是指针了。
freestyler
2012-08-25 16:27:27 +08:00
没有为什么,就是style,个人喜好,

K&R写的TCPL中用了这种, linux也是用这种
http://www.kernel.org/doc/Documentation/CodingStyle
goool
2012-08-25 18:31:31 +08:00
因为 C 语言中有一种尽可能让变量的「声明」与「使用」看起来差不多的奇怪传统。比如:

int *p;
...
*p = 5;

int a[8];
...
a[0] = 0;

typedef int (*func)(int);
func f;
...
int ret = (*f)(3); // *可省略
ant_sz
2012-08-25 19:28:21 +08:00
@lldong
@thinkinnight

C语言这个特点比较纠结
typedef int* int_ptr;
之后,在进行
int_ptr a,b;
得到的a和b都是指针,但是
int* a,b;
b确实是int类型的,不明白为何这样设计。
alsotang
2012-08-25 23:32:44 +08:00
@ant_sz 同问,我觉得如果int* a,b的话,就应该让a和b都是int*类型。
RisingV
2012-12-29 01:04:00 +08:00
@ant_sz C诞生的比较早,可能那样做词法分析的时候比较方便吧,后面为了保持兼容就沿用了。现在Thompson 和 Pike 的作为“Better C”的 golang就不会这样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/45975

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX