资源描述:
《C语言程序设计教程-第8节(新)[1].ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、8.1指针与指针变量8.2指针与函数8.3指针与数组8.4指针与字符串8.5指针数组与命令行参数8.6程序举例第8章指针C语言程序设计教程1计算机教学中心——李勇C语言程序设计教程8.1指针与指针变量8.1.1指针的概念1.内存与变量地址内存地址:内存是计算机用于存储数据的存储器,以一个字节作为存储单元,为了便于访问,给每个字节单元一个唯一的编号,第一字节单元编号为0,以后各单元按顺序连续编号,这些单元编号称为内存单元的地址。变量地址:变量所分配存储空间的首字节单元地址(字节单元编号)。2计算机教学中心——李勇C语言程序设计教程2.变量的三要
2、素:名字、类型与值每个变量都通过变量名与相应的存储单元相连系,具体分配哪些单元给变量,由C编译系统完成变量名到对应内存单元地址的变换。变量分配存储空间的大小由类型决定。变量的值则是指相应存储单元的内容。3.内存存取方式直接存取:把直接按变量名或地址存取变量值的方式称为“直接存取”方式。间接存取:通过定义一种特殊的变量专门存放内存或变量的地址,然后根据该地址值再去访问相应的存储单元。3计算机教学中心——李勇C语言程序设计教程系统为特殊变量p(用来存放地址的)分配的存储空间地址是4800,p中保存的是变量a的地址,即4000,当要读取a变量的值1
3、2345时,不是直接通过a变量,也不是直接通过保存12345的内存单元的地址4000去取值,而是先通过变量p得到p的值4000,即a的地址,再根据地址4000读取它所指向单元的值12345。这种间接的通过变量p得到变量a的地址,再存取变量a的值的方式即为“间接存取”。通常称变量p指向变量a,变量a是变量p所指向的对象…400012345400040024800pap(4800)p(4800)a(4000)4000123454000间接存取示意图4计算机教学中心——李勇C语言程序设计教程4.指针的概念在C语言中,用指针来表示一个变量指向另一个变
4、量这样的指向关系。所谓指针即地址。一个变量的指针即该变量的地址,如4000就是指向变量a的指针。指针变量:专门存放地址的变量,如p即是一个指针变量,它存放的是a的地址4000。5计算机教学中心——李勇C语言程序设计教程8.1.2指针变量的定义与初始化1.指针变量的定义类型标识符*指针变量名;例:float*p1;(定义p1为指向实型变量的指针变量)char*p2;(定义p2为指向字符型变量的指针变量)在指针变量定义中,*是一个说明符,它表明其后的变量是指针变量,如p是指针变量,而不要认为“*p”是指针变量。指针变量定义时指定的数据类型不是指针
5、变量本身(变量存放的值)的数据类型,而是指针变量所指向的对象(或称目标)的数据类型指针变量存放的是所指向的某个变量的地址值,而普通变量保存的是该变量本身的值指针变量并不固定指向一个变量,可指向同类型的不同变量6计算机教学中心——李勇C语言程序设计教程(1)指针运算符与地址运算符与指针引用有关的两个运算符:&与*。&:取地址运算符*:指针运算符,或称指向运算符、间接访问运算符。指针指向的对象的表示形式:*指针变量此处*是访问指针所指对象的运算符,与指针定义时的*不同。2.指针变量初始化7计算机教学中心——李勇C语言程序设计教程(2)指针变量初始
6、化若有定义:inta,*p;语句仅仅定义了指针变量p,但指针变量并未指向确定的变量(或内存单元)。因为这些指针变量还没有赋给确定的地址值,只有将某一具体变量的地址赋给指针变量之后,指针变量才指向确定的变量(内存单元)。指针变量初始化:在定义指针时同时给指针一个初始值如:inta,*p=&a;40003a(4000)pa*pa8计算机教学中心——李勇C语言程序设计教程(3)指针变量的引用①*指针变量名——代表所指变量的值。②指针变量名——代表所指变量的地址。有定义:inta,*p=&a;用*p来表示p指向的对象a,*p与a是等价的。*p可以象普
7、通变量一样使用。例如:a=12;*p=12;scanf("%d",&*p);scanf("%d",p);printf(“%d%d”,*p,a);注意:*与&具有相同的优先级,结合方向从右到左。这样,&*p即&(*p),是对变量*p取地址,它与&a等价;p与&(*p)等价,a与*(&a)等价。9计算机教学中心——李勇C语言程序设计教程8.1.3指针运算1.指针的赋值运算(1)将变量地址值赋给指针变量,使指针指向该变量。设有如下定义:inta,b,*pa,*pb;float*pf;第一行定义了整型变量a,b及指针变量pa,pb。pa、pb还没有被
8、赋值,因此pa、pb没有指向任何变量,下面语句完成对pa,pb的赋值:pa=&a;pb=&b;10计算机教学中心——李勇C语言程序设计教程例如:intj=2,k=5