指针书写风格

在指针篇(1)当中, 提到了指针定义的两种风格:「 int *p 」和「 int* p 」。 这篇博文就来说说为什么会有两种风格的指针定义。 首先需要说明的是这两种风格的指针定义在语法上完全正确, 任何的 C 语言编译器都承认这两种定义方式, 甚至你以写成:「 int * p 」, 但是这种写法是完全不推荐的。  

既然编译器不区分上述两种风格的定义方法,那么这两种写法究竟有什么区别?我们知道 C 语言定义一个变量是通过「数据类型 + 变量名」的方式。 譬如:「 int a 」,其中「 int 」是数据类型,「 a 」是变量名。 我们延伸到指针就明白了,「 int *p 」将 「 int 」当成了数据类型, 「 *p 」则作为一个整体被认为是指针变量。 即定义了一个指针变量「 *p 」, 该指针的数据类型是「 int 」; 对于「 int* p 」来说,「 int* 」作为一个整体被认为是数据类型,而「 p 」则被认为是指针变量。 

这两种风格的写法哪种更好? 其实网上各有各的说法, 就本人而言, 我更支持前者这种写法, 原因之一就是我学 C 语言入门的时候使用的《C 语言入门经典》(Ivor Horton 著)就是这种写法, 习惯使然。 另外一个原因主要是以下这个例子:

int *pa, pb; 
int* pa, pb;

pa 是指针变量, 这没有疑问, 那么 pb 呢? 通过编译发现, 编译器认为 pa 是一个指针变量, 而 pb 则是一个一般变量。也就是说编译器并不认为「 int* 」是一个整体。 这时候, 第一种写法就显示出优势来了, 这里的「*」仅仅作为一个修饰符, 表示后面的 pa 是一个指针变量。 

那么是不是第一种说法就更好呢? 其实不然, 恰恰相反, 我虽然支持第一种写法, 因为它更加一目了然, 我可以知道有变量名前面带着「*」的就是指针变量, 反之则不是。 但是我更支持将「 int* 」作为一个整体, 表示数据类型。 这对于我们理解指针是有帮助的,如果还使用第一种说法, 你会发现面对一些复杂的指针的时候你无法理解。 比如: 二重指针、 数组指针、 函数指针等。 这些东西会在下篇博文中提到, 这也是很常见的笔试题。 你完全理解了的话, C 语言的精髓你就懂了一大半了。

2017 年 7 月 8 日

Kilento

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值