欢迎来到天天文库
浏览记录
ID:55827813
大小:384.00 KB
页数:80页
时间:2020-06-09
《C语言程序设计――指针(完整版).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第九章指针§9.1地址和指针的概念为了说清楚什么是指针,必须弄清楚数据在内存中是如何存储的,又是如何读取的。计算机中,所有的数据都是存放在存储器的内存单元中的。一般把存储器中一个字节称为一个内存单元,不同数据类型所占用的内存单元数不等,如整型变量占2个字节,字符变量占1个字节等。为了正确地访问这些内存单元,必须为每个内存单元编上号,根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号,称为“地址”。内存单元的地址和内存单元的内容是两个不同的概念:假设程序中定义了整型变量i,并赋值为3。
2、编译时系统分配2000和2001两个字节给变量i,此时两个内存单元的编号为单元的地址,其中存放的数据即是该单元的内容。两种访问方式:直接访问方式:在程序中一般是通过变量名来对内存单元进行存取操作的,其实程序在编译后,已经将变量名转换成变量的地址,对变量值的存取都是通过地址进行的。间接访问方式:将变量i的地址存放在另一个变量中,C语言规定,可以在程序中定义一种特殊的变量,用来存放地址。假设定义一个变量p,用来存放整型变量的地址,它被分配为3010、3011两个字节。可以通过下面语句将i的地址(20
3、00)存放到p:p=&i;对变量i是访问,可直接访问,已知变量i的地址,根据此地址直接对变量i的存储单元进行存取访问;也可间接访问,先找到存放变量i的地址的变量p,从其中得到变量i的地址,然后找到变量i的存储单元,对它进行存取范围。一个变量的地址称为该变量的“指针”。如,地址2000是变量i的指针。C语言中,用一个变量存放指针(地址),此变量称为指针变量,上述的变量p是指针变量,指针变量的值是某个内存单元的地址(指针)。严格地说,一个指针是一个地址,是一个常量;而一个指针变量却可以被赋予不同的指
4、针值,是变量。但通常把指针变量简称指针。指针变量的值不仅可以是变量的地址,也可以是其他数据结构的地址。例如:在一个指针变量中可存放一个数组或一个函数的首地址。§9.2变量的指针和指向变量的指针变量区别:变量的指针和指针变量1.变量的指针就是变量的地址。2.存放变量地址的变量是指针变量,它用来指向另一个变量。为了表示指针变量和它所指向的变量之间的联系,在程序中用“*”符号表示“指向”。若已定义i_pointer为指针变量,则*i_pointer是i_pointer所指向的变量,因此*i_point
5、er也代表一个变量,它和变量i是同一回事。下面两个语句作用相同:(1)i=3;(2)*i_pointer=3;第二个语句含义是将3赋给指针变量i_pointer所指向的变量i.一、指针变量的定义指针变量在使用前必须先定义,一般形式为:类型说明符*指针变量名;其中,*表示这是一个指针变量,类型说明符表示该指针变量所指变量的数据类型。例如:int*p1;(其中p1(而不是*p1)是一个指向整型变量的指针变量,它的值是某个整型变量的地址。)float*p2;(其中p2是指向浮点型变量的指针变量)说明:
6、(1)指针变量名的构成原则是标识符,前面必须有“*”,表示该变量的类型是指针型变量。(2)在一个定义语句中,可以同时定义普通变量、数组、指针变量。(3)类型说明符说明的数据类型不是指针变量中存放的数据的数据类型,而是它将要指向的变量或数组的数据类型。因此,一个指针变量只能用来指向同种数据类型的其他变量或数组,不能时而指向一个浮点型变量,时而指向一个整型变量。二、指针变量的引用指针变量中只能存放变量的地址,绝不能存放任何其他数据。例如:int*p;p=2000;/*2000是一个整数而不是一个地址
7、*/C语言提供两种有关的运算符:(1)&:取地址运算符(用来表示变量的地址)(2)*:取内容运算符(用来取其指向的内容,或称“间接访问”运算符,或称指针运算符)两种运算符都是单目运算符,其结合性都为自右向左,优先级别相同。例如:&a为变量a的地址,*p为指针变量p所指向的内存单元的内容(即p所指向的变量的值)。说明:(1)设有指向整型变量的指针变量p,若要把整型变量a的地址赋予p,有以下方式:指针变量初始化的方法:inta;int*p=&a;赋值语句的方法:inta,*p;p=&a;(2)指针运
8、算符*和指针变量说明中的指针说明符*不是一回事。后者表示其后的变量是指针类型,前者则是一个运算符用以表示指针变量所指的变量。说明:(3)如果已执行了语句p=&a;,则:&*p:先进行*p的运算,即是变量a,再执行&运算,即变量a的地址。因此&*p与&a相同。*&a:先进行&a的运算,即得a的地址,再执行*运算,即&a所指向的变量,即变量a。因此*&a与a相同。#includevoidmain(){inta,b;int*p1,*p2;a=100;b=10;p1=&a;p2=&b;
此文档下载收益归作者所有