c语言指针相当于c,「C语言指针」原来是这样,我已经完全懂了.老师:真的有点猛...

在初学C语言时候,有些同学总会被一些比较长的语句吓到啥啥啥?这写的是啥?很多同学表示:字都认识,就是看不懂.

22a1516bb99973cd53a80b93ae1a90dd.png

本文就来带着大家来学习一种超能力,就是看到一种说明语句,就能准确定位语句所描述的内容,或者说当自己需要某一种数据类型的时候,在类型定义的时候,说明语句怎么写,这是作为一个编程者所必备的能力.

b63819fb8d7f3b8d6a604ff0f1922200.png

既然是分析说明语句,那么第一个知识点显然就是认识说明语句.什么样子的语句是说明语句呢?简单,只要是以类型名开头的语句,你就可以认为它是说明语句.

e5c05de76600696f17a914233ea0f7a5.png

我们先看最简单的例子: int p; 显然这是定义了一个整型变量p,那么它是怎么来的呢?是什么样的特性决定了我们这样的理解呢?

显然,我们是通过从左往右阅读,看到了数据类型int,心中有数,这是一个整型,然后看到一个名字p,这是一个变量.所以连起来就是定义了"整型变量p".

431e6c5e62e8c3c2a1fbba973c94fea4.png

把这样的思路推广一下,看另外一个例子: int *p; 从左往右,我们也看到了一个类型 int, 往后看到一个*p, 显然*不可能是名字的组成部分,因为标志符只能是由字母数字下划线构成.

所以名字只能是p,而不是*p. 其实在浏览说明语句的时候,只要见到名字结合了*,就可以下结论:这是一个指针!

22f3ae0f62efa271e7b00e1e5f381c3f.png

那么怎么念呢?还是沿袭我们对于简单说明语句int p;的解读:碰到类型就念类型名,碰到*就念指针,碰到名字就念变量.所以就变成了定义了一个"整型指针变量p".

接着语句升级,看例子int **p; 从左往右看,找到的名字依然是p,名字结合了*,所以这也是一个指针,它可以指向某一种类型的数据.

a1c6642c734a705a2981ef7a6f15cb23.png

那么,这个指针可以指向什么样子的数据呢?答案是:看剩余部分,其实就是指针的基类型.

对于说明语句int **p; 除了指针标志*和名字p之外,剩余部分是int *,所以这样的指针可以指向的数据类型是int *,可以存放int *类型数据的地址.

8cf7f9b3a7cbfe6e838e9ab9a7952fa3.png

那么怎么读呢?按照我们最朴素的情感,依然是从左往右,连起来就是定义了一个"整型指针指针变量p",也可以读作"指向了整型指针的指针",缩写为二级指针.

接着是另一个例子int p[10];我们也可以从左往右看,显然名字还是叫做p,但是出现了新的元素[],它也不是名字的组成部.那么依然可以下结论:只要名字结合了[],那么这就是数组.所以这是"定义了一个长度为10的整型数组p".

e2d1096b5f2867b6d4881c87c2f3b07e.png

让后接着升级:int *p[10].前面我们说名字结合*就是指针,名字结合[]是数组,那么有*又有[]怎么办呢?答案是:看优先级!

d0ce757b7fb12b6360d3c6c684d7fba7.png

根据优先级规则,名字会先结合[],所以这是一个数组,数组中每一个元素可以相当于什么类型的变量来使用呢?依然是看剩余部分(也就是数组的基类型).在这里剩余部分是int *,就表明了这是一个指针数组,只不过里面每一个元素都是一个整型指针.

dd84a0bbdca6b999ef085aa9696c8269.png

最后再来一个:int (*p)[10].沿袭前面的思路就很明显了,先找名字,找到名字是p,接着发现名字结合了*,所以下结论:这是一个指针!是一个指向什么类型的指针由基类型决定,它的基类型是int [10],所以这是一个数组指针.

0b06fd34b08d2bdf34e555482921b8a7.png

没有错,就是这么简单.其实还有其他的说明语句,比如说函数指针,指针函数,结构体数组,结构体指针等等,碰到的时候或者需要声明某种类型的变量,可以沿用这样的思路去顺藤摸瓜,就会成竹在胸了.

感谢阅读,学习使人强大.

b8793f2574bee15721c5a31131a1c5e6.png

举报/反馈

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值