- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
凌乱的指针与数组
mengyingchina@163.com
0 C语言的灵魂?!-2-
1 指针与地址-2-
2 指针与函数参数-4-
3 指针与数组-6-
4 地址算术运算-8-
5 字符指针与函数-10-
6 指针数组以及指向指针的指针-13-
7 多维数组-16-
8 指针数组的初始化-17-
9 指针与多维数组-18-
10 命令行参数-19-
11 指向函数的指针-20-
12 复杂声明-23-
13 令人震惊的事实:数组和指针并不相同-24-
13.1 数组并非指针-24-
13.2 数组与指针的区别-25-
13.3 为什么会发生混淆?-25-
13.4 什么时候指针和数组是相同的?-26-
13.5 为什么把数组形参当成指针-28-
13.6 数组和指针可交换性总结-28-
14 结束语-29-
15 参考资料-29-
C语言诡异离奇,缺陷重重,却获得了巨大的成功。
——DennisRitchie
0 C
0 C
00 CC 语言的灵魂?!
指针是一种保存变量地址的变量。
指针并不是因为C 语言才有的。寻址、执行这么一个过程就是计算机的基本原理。尽
管很多高级语言都没有指针,但程序的运行就是靠着不停的寻址来运行的。可执行的机器码、
全局变量、局部变量和程序返回地址等这三块二进制数都存放在内存中。而只有cpu具有计
算功能,他的计算实际上非常弱,每次只能算一个非常简单的算术运算或逻辑运算(但运算
速度惊人)。要把程序代码和变量从内存传到cpu就需要通过找寻数据在内存中的地址,然
后通过数据总线和地址总线传进 cpu运算。所以如果你了解了程序的运行机制就可以根据
地址去做很多很灵活甚至是很诡异的操作。不仅如此,你想做的所有操 作也都离不开地址。
即使让你自己去设计一个语言,你会发现,类似指针这么个概念也是不可缺少的,离开它计
算机就无法工作了。不知道是谁说的“指针是C 语言的灵魂”,确实如此。有些任务用其它
语言可以实现,但C 能够更有效的实现;有些任务无法用其它语言实现,如直接访问硬件,
但C 却可以。Pascal语言的指针哲学有点类似这样的说法:使用锤子可能会伤着你自己,所以
我们不给你锤子。C语言的指针哲学是:“给你锤子,实际上你还可以用好几种锤子。但祝
你好运!”。也就是说,C指针给我们足够的灵活性来获得代码上效率的提升,但同时要承
担相应的风险。
指针和数组之间的关系十分密切,我们将讨论它们之间的关系,并探讨如何利用这种关
系。
1
1
11 指针与地址
我们在这里假定x 与y 是整数,而ip 是指向int 类型的指针,下面的代码段说明了
如何在程序中声明指针以及如何使用运算符和*:
int x = 1, y = 2, z[10];
int *ip; /* ip is a pointer to int */
ip = x; /* ip now points to x */
y = *ip; /* y is now 1 */
*ip = 0; /* x is now 0 */
ip = z[0]; /* ip now points to z[0] */
我们应该注意,指针只能指向某种特定类型的对象,也就是说,每个指针都必须指向某
种特定的数据类型。(一个例外情况是指向void 类型的指针可以存放指向任何类型的指针,
但它不能间接引用其自身。)
最后说明一点,由于指针也是变量,所以在程序中可以直接使用,而不必通过间接引用
的方法使用。例如,如果iq是另一个指向整型的指针,那么语句
iq = ip
将把 中的值拷贝到 中,这样,指针 也将指向 指向的对象。
ip iq iq ip
下面通过分析C程序的机器级实现来更好的理解指针与地址的关系。
-2 -
考虑下面所示的数据交换函数,既有C
文档评论(0)