C 语言返璞归真: 指针篇番外
来源:互联网 发布:星空卫视直播软件下载 编辑:程序博客网 时间:2024/05/16 06:47
续 > C 语言返璞归真: 指针篇(1)
在指针篇(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
- C 语言返璞归真: 指针篇番外
- C 语言返璞归真: 指针篇(1)
- C 语言返璞归真: 指针篇(2)
- C 语言返璞归真: 指针篇(3)
- C 语言返璞归真: 指针篇(4)
- C语言返璞归真之修改const常量和使用变量定义数组长度
- C语言中的指针
- C语言指针问题
- C语言野指针
- C语言之指针
- C语言指针简介
- C语言的指针
- c语言指针点滴
- C语言的指针
- c语言指针简介
- c语言 数组 指针
- c语言指针详解
- 理解C语言指针
- 安卓开发点击CheckBox显示明文密码
- 洛谷 P3478 [POI2008]STA-Station(bzoj P1131 [POI2008]STA-Station)
- 杂项
- 计算机位运算
- java并发编程实战-基础构建模块3
- C 语言返璞归真: 指针篇番外
- EJB到底是什么?
- 用户注册
- sklearn.linear_model.LinearRegression
- PYTHON数据分析入门
- Educational Codeforces Round 22 C The Tag Game(树的深度)
- MyBatis一级缓存的简单剖析
- Android中如何使按钮的背景变得透明
- 如何从CSDN上转载文章