C语言程序设计 任正云 ch6

C语言程序设计 任正云 ch6

ID:40238474

大小:1.52 MB

页数:79页

时间:2019-07-28

C语言程序设计 任正云 ch6_第1页
C语言程序设计 任正云 ch6_第2页
C语言程序设计 任正云 ch6_第3页
C语言程序设计 任正云 ch6_第4页
C语言程序设计 任正云 ch6_第5页
资源描述:

《C语言程序设计 任正云 ch6》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C语言程序设计主编任正云中国水利水电出版社第6章指针指针是C语言中的一个重要概念,是其最具特色的语言部分,也是C语言的精华,同时也是C语言的难点。指针可以有效地表示复杂的数据结构;能动态分配内存;方便地使用字符串;有效而方便地使用数组;在调用函数时能获得1个以上的结果;能直接处理内存单元的地址等。6.1.1地址和指针的概念内存是计算机的一个重要组成部分,用于存放那些“正在”使用的数据和“正在”执行的程序。内存单元的基本单位是字节,为了方便对内存的访问,每一个内存单元都有一个编号,就像门牌号一样,这个编号就是内存的地址。C程序中的每一个变量,C程序的每一个函数,在内存中都会对应一定的内存单元。

2、1.内存地址——内存中存储单元的编号6.1.1地址和指针的概念编译时系统分配2000和2001两个字节给变量i,2002和2003两个字节给变量j,2004和2005两个字节给变量k。2.变量的地址——系统分配给变量的内存单元的起始地址如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配一个或若干个存储单元。不同的数据类型分配不同字节的存储空间。每一字节都有一个地址,一般把每个数据的首字节地址称为该数据的地址。假如有如下定义:inti,j,k;6.1.1地址和指针的概念3.变量值的存取——通过变量在内存中的地址进行在程序中一般是通过变量名来对内存单元进行存取操作的。其实程序

3、经过编译以后己经将变量名转换为变量的地址,对变量值的存取都是通过地址进行的。6.1.1地址和指针的概念②系统对语句“scanf("%d",&i);”在执行时,如果从键盘输入3,表示要把3送到变量i中,实际上是把3送到地址为2000开始的整型存储单元中。(1)直接访问——直接利用变量的地址进行存取。①对于语句“printf("%d",i);”它是这样执行的:根据变量名与地址的对应关系(这个对应关系是在编译时确定的),找到变量i的地址2000,然后从由2000开始的两个字节中取出数据(即变量的值),把它输出。这里输出的值为3。则从2000和2001字节取出i的值(3),再从2002和2003字节

4、取出j的值(假设为6),将它们相加后再将其和(9)送到k所占用的2004和2005字节单元中。这种按变量地址存取变量值的方式称为“直接访问”方式。如果有语句:k=i+j;6.1.1地址和指针的概念要存取变量i的值,也可以采用间接方式:先找到存放“i的地址”的变量i_pointer,从中取出i的地址(2000),然后到2000和2001字节取出i的值(3)。(2)间接访问——通过另外一个变量访问该变量的值。C语言规定,可以在程序中定义整型变量、浮点型变量、字符变量等,也可以定义这样一种特殊的变量,它是存放地址的。假设定义了一个变量i_pointer,用来存放整型变量的地址,它被分配为3010和

5、3011两个字节。可以通过下面的语句将i的起始地址(2000)存放到i_pointer中。i_pointer=&i;这时,i_pointer的值就是2000,即变量i所占用单元的起始地址。6.1.1地址和指针的概念图6-2(a)表示直接访问,已经知道变量i的地址,根据此地址直接对变量i的存储单元进行存取访问(图示把数值3存放到i中)。6-2(a)6-2(b)间接访问(3)两种访问方式的比较。图6-2(b)表示间接访问,先找到存放变量i地址的变量i_pointer,从其中得到变量i的地址,再据此找到变量i的存储单元,然后对它进行存取访问。6.1.1地址和指针的概念指针变量的值(即指针变量中存放

6、的值)是地址(即指针)。一个变量的地址称为该变量的“指针”。例如,地址2000是变量i的指针。如果有一个变量专门用来存放另一个变量的地址(即指针),则它称为“指针变量”,指针变量就是地址变量(存放地址的变量)。6.1.2指向变量的指针变量定义了两个整型变量x和y,一个指针变量p。2.指针变量的定义与应用与一般变量的定义相比,除变量名前多了一个星号“*”(指针变量的定义标识符)外,其余一样:数据类型*指针变量[,指针变量2……];例如:intx=10,*p,y;6.1.2指向变量的指针变量#include"stdio.h"voidmain(){intnum_int=12,*p_int;floa

7、tnum_f=3.14,*p_f;charnum_ch='p',*p_ch;p_int=&num_int;p_f=&num_f;p_ch=&num_ch;printf("num_int=%d,*p_int=%d",num_int,*p_int);printf("num_f=%d,*p_f=%d",num_f,*p_f);printf("num_ch=%d,*p_ch=%d",num_ch,*p_c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。