C语言第八章地址和指针.doc

C语言第八章地址和指针.doc

ID:51687799

大小:33.00 KB

页数:9页

时间:2020-03-15

C语言第八章地址和指针.doc_第1页
C语言第八章地址和指针.doc_第2页
C语言第八章地址和指针.doc_第3页
C语言第八章地址和指针.doc_第4页
C语言第八章地址和指针.doc_第5页
资源描述:

《C语言第八章地址和指针.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、第八章地址和指针第一节变量的地址和指针ap10012001300120011、计算机的内存是以字节为单位的一片连续的存储空间,每一个字节都有一个编号,这个编号就成为内存地址。2、程序中定义了一个变量,c编译系统就会根据定义中变量的类型,为其分配一定字节数的内存空间:Shortint2Intfloat4Double8char1xba指针412011202120312041015101610121013图8.1变量在内存中所占字节的地址示意图每个变量的地址就是指该变量所占存储单元的第一个字节的地址。

2、3、直接存取:程序中我们对变量进行存取操作,实际上也就是对某个地址的存储单元进行操作。这种直接按变量的地址存取变量值的方式。a4、在c语言中,还可以定义一种特殊的变量,这种变量只是用来存放内存地址的。pp10121012101320022002图8.2存放地址的指针变量示意图通过变量p间接得到变量a的地址,然后再存取变量a的值的方式称为“间接存取”方式,通常变量p指向了变量a,变量a是变量p所指向的对象。5、用来存放指针地址的变量就称作“指针变量”。6、“变量p指向变量a”的含义就是指针变量p中

3、存放了变量a的地址。7、在某些场合,指针是使运算得以进行的唯一途径。第二节指针的定义赋值一、指针变量的定义和指针变量的基本类型1、定义指针变量的一般形式如下:类型名*指针变量名1,*指针变量名2……说明:1)类型名是基本类型。2)*是说明符。(而在调用的时候,代表的是存储单元中的值)3)指针变量名是用户标识符。例:1)int*pi,*pj;pipj只能存放整型变量的地址intI,*pi;double*pj;2)p为一个指向指针的指针变量int**p,*s,k=20;s=&k;p=&s;*p代表存

4、储单元s,*s代表存储单元k,因此**p也代表存储单元k2、为什么指针变量要有“基类型”呢?一个指针变量中存放的是一个存储单元的地址值,一个存储单元的中的“一”所代表的字节数是不同的:intfloat一、给指针变量的赋值1、通过求地址运算符(&)获得地址值1)&用来求出运算对象地址,用求地址运算可以把一个变量的地址赋给指针变量2)把变量k的地址赋予q,这时可以说:q指向了变量k。3)求地址运算符只能应用于变量和数组元素,不可用于表达式、常量或被说明为register的变量。&必须放在运算对象左边

5、,且运算对象类型必须与指针变量的基类型相同。4)调用scanf函数时,若q=&k则scanf(“%d”,&k)和scanf(“%d”,q)是等价的。2、通过指针变量获得地址值可以通过赋值运算,把一个指针变量中的地址赋给另外一个指针变量,从而使这两个指针指向同一地址。p=q注意:赋值号两边的指针变量的基类型必须相同。3、通过标准函数获得地址值可以通过调用库函数malloc和calloc在内存中开辟动态存储单元,并把开辟的动态存储单元的地址赋给指针变量。4、给指针变量赋“空”值p=NULL;NULL

6、代码值为0,当执行了以上的赋值语句后,称p为空指针。以上语句等价于:p=’’p=0企图通过一个空指针去访问一个存储单元时,将会出错。一、对指针变量的操作1、通过指针来引用一个存储单元1)c语言中提供了一个称作“间接访问运算符”的单目运算符“*”。当指针变量中存放了一个确切的地址值时,就可以用*p来引用该地址的存储单元。int*p,i=10,j;p=&ij=*pj=ij=*(&i)j=*&ij=*p+1指针变量p所指存储单元中的内容加1后赋予j2)int*p,k=0;p=&k;*p=100把1

7、00存放在变量k中*p=*p+1p所指存储单元中的值加1后,再放入p所指存储单元中,即:k变为101*p出现在赋值号左边时,代表的是指针所指的存储单元;当*p出现在赋值号右边时,代表的是指针所指的存储单元的内容。*p+=1++*p(*p)++括号不能少1、移动指针a[0]a[1]a[2]a[3]a[4]1122334455qpq=p+2;/*使指针q指向存储单元a【2】*/q++;/*q向高地址移动指针,指向a【3】*/q++;/*q向高地址移动指针,指向a【4】*/q--;/*q向低地址移动指

8、针,指向a【3】*/p++;/*p向高地址移动指针,指向a【1】*/q-p=21)所谓移动指针就是对指针变量加上或减去一个整数,或通过赋值运算,使指针变量指向相邻的存储单元。因此只有当指针指向一串连续的存储单元时,指针的移动才有意义。2)当指针指向一串连续的存储单元时,可以对指针变量进行加上或减去一个整数的运算,也可以对指向同一串连续存储单元的两个指针进行相减运算。3)在对指针进行加、减运算中,数字1不代表整数1,而是指一个存储单元长度,至于一个长度占多少个字节的存储空间,则视指针的基类型而定。

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

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

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