找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5412|回复: 9
打印 上一主题 下一主题
收起左侧

让你不再害怕指针(关于C语言指针的超详细解说 共29页pdf下载)

  [复制链接]
跳转到指定楼层
楼主
让你不再害怕指针
前言:复杂类型说明
要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:
从变量名处起,根据运算符优先级结合,一步一步分析.
下面让我们先从简单的类型开始慢慢分析吧:

//比*高,所以 P是一个数组,然后再与*结合,说明
//数组里的元素是指针类型,然后再与 int结合,
//说明指针所指向的内容的类型是整型的,所以
//P 是一个由返回整型数据的指针所组成的数组

int (*p)[3];
//首先从 P处开始,先与*结合,说明 P是一个指针
//然后再与[]结合(与"()"这步可以忽略,只是为
//了改变优先级),说明指针所指向的内容是一个
//数组,然后再与 int 结合,说明数组里的元素是
//整型的.所以 P 是一个指向由整型数据组成的数
//组的指针


//的指针变量的函数.
说到这里也就差不多了,我们的任务也就这么多,理解了这几个类型,其它的类型对我们来说也是小菜了,不过我们一般不会用太复杂的类型,那样会大大减小程序的可读性,请慎用,这上面的几种类型已经足够我们用了.

1、细说指针
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。让
我们分别说明。
先声明几个指针放着做例子:

(5)int*(*ptr)[4];//指针的类型是 int*(*)[4]
怎么样?找出指针的类型的方法是不是很简单?

2.指针所指向的类型

当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。
从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:
(1)int*ptr; //指针所指向的类型是int
(2)char*ptr; //指针所指向的的类型是char
(3)int**ptr; //指针所指向的的类型是int*
(4)int(*ptr)[3]; //指针所指向的的类型是int()[3]
(5)int*(*ptr)[4]; //指针所指向的的类型是int*()[4]
在指针的算术运算中,指针所指向的类型有很大的作用。
指针的类型(即指针本身的类型)和指针所指向的类型是两个概念
。当你对 C 越来越熟悉时,你会发现,把与指针搅和在一起的"类型"这个概念分成"指针的类型"和"指针所指向的类型"两个概念,是精通指针的关键点之一。
我看了不少书,发现有些写得差的书中,就把指针的这两个概念搅在一起了,所以看起书来前后矛盾,越看越糊涂。

3.指针的值----或者叫指针所指向的内存区或地址
指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32 位程序里,所有类型的指针的值都是一个 32位


…………………………
…………此处省略若干字………………
…………………………

10、结束语
现在你是否已经觉得指针再也不是你所想的那么害怕了,如果你的回答是:对,我不怕了!哈哈,恭喜你,你已经掌握 C语言的精华了,C中唯一的难点就是指针,指针搞定其它小菜而已,重要的是实践,好吧,让我们先暂停C 的旅程吧,开始我们的C++编程,C是对底层操作非常方便的语言,但开发大型程序本人觉得还是没有 C++方便,至少维护方面不太好做。而且C++是面向对象的语言,现在基本已经是面向对象的天下了,所以建议学 C++。C++是一门难学易用的语言,要真正掌握 C++可不是那么容易的,将基本的学完后,就学数据结构吧,算法才是永恒的,程序设计语言层出不穷,永远学不完。学完之后就认真啃下 STL 这根骨头吧,推荐书籍--------范型编程与 STL 和 STL 源码剖析。如果你达到了这样要求,再一次恭喜你,你已经是个程序高手了,甚至可以说是个算法高手,因为 STL 里有大量的精华而高效的算法。唉,已经该说再见的时候了,让我们一起用我们的语言来谱写我们的人生吧,最后笑个,哈哈,睡觉了。好累,都 2:00了

完整的pdf格式文档51黑下载地址(共29页):
让你不再害怕指针.PDF (214.83 KB, 下载次数: 283)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏24 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:88606 发表于 2018-3-20 11:53 | 只看该作者
辛苦了楼主,打字确实辛苦!
回复

使用道具 举报

板凳
ID:372426 发表于 2018-12-30 11:34 | 只看该作者
好书,谢谢
回复

使用道具 举报

地板
ID:5203 发表于 2018-12-30 15:10 | 只看该作者
楼主辛苦了,谢谢!
回复

使用道具 举报

5#
ID:18591 发表于 2019-2-4 15:06 | 只看该作者
感謝分享 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
回复

使用道具 举报

6#
ID:276761 发表于 2019-2-4 19:17 | 只看该作者

楼主辛苦了,谢谢!
回复

使用道具 举报

7#
ID:596434 发表于 2023-6-1 12:55 | 只看该作者
非常好的文章,感谢楼主分享
回复

使用道具 举报

8#
ID:712493 发表于 2023-6-3 09:01 | 只看该作者
辛苦了楼主,打字确实辛苦!  这个必须顶一下,太难了
回复

使用道具 举报

9#
ID:86450 发表于 2023-6-3 11:09 | 只看该作者
比如 这句  (5)int*(*ptr)[4]; //指针所指向的的类型是int*()[4]
在做什么项目上,会用到呢?
回复

使用道具 举报

10#
ID:88756 发表于 2023-6-28 10:39 | 只看该作者

辛苦了楼主,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表