u8国际,u8国际官方网站,u8国际网站最新,u8国际网站,u8国际网址,u8国际链接
1、第八章,指针,1/55,8.1 指针的概念 8.2 指针变量的定义和引用 8.3 指针与数组 8.4 指针与字符串 8.5 指针数组与指向指针的指针 8.6 返回指针值的函数 8.7 本章要点小结 8.8 本章程序举例,2/55,8.1 指针的概念,一、数据的存取,1、内存地址,内存的每个字节都有一个编号,这个编号称为“内存地址”。,程序中的每个数据都对应着内存中的一个地址,从该地址开始的一个或多个字节用来存放该数据。,int i, j, k;,i,j,k,2、内存单元的地址和内存单元的内容的区别:,若i=3, j=5;,从图中可以看出它们的区别。,3/55,程序编译后已经没有i、j、k这些变量名了,而是将变量名转换为变量的地址,计算机通过内存地址对变量进行存取。,二、直接访问和间接访问,1、直接访问方式:,、i=3;,、j=i+2;,、printf(“%d“, i);,、scanf(“%d“, ,、k=i+j; 如何执行?,按变量的地址存取变量的方式,2、间接访问方式:,语言中可以定义整型变量、实型变量、字符型变量,各自存放相应类型的数据;另外还可以定义和使用一种特殊类型的变量,用来
2、存放变量的地址。,4/55,假设已经定义变量 ip 用来存放整型变量的地址,它被分配到内存单元3000和3001。,ip,通过执行语句:ip= 将整型变量i 的地址存放到变量ip中,即ip的值为变量i所对应的内存单元的起始地址2000。,2000,现在要存取i的值可以这样做:先找到存放i的地址的内存单元地址(3000和3001),从中取出变量i的地址(2000),然后再对2000和2001单元进行存取这就称为间接访问。,3、关于“指向”的含义:,变量ip的值为2000,即变量i的地址,这样就在ip和i之间建立了一种联系:,5/55,通过变量ip知道变量i的地址,从而找到变量i的内存单元,因此说变量ip指向变量i,用箭头表示这种“指向”关系。,4、为了表示将数值10送到变量i中,可以有两种表示方法:,、将10送到变量i所标志的单元中;,10,、将10送到变量ip所指向的单元中;,10,6/55,三、指针与指针变量,通过地址能找到所需的变量单元,可以说:地址“指向”该变量单元。因此,把一个变量的地址称为该变量的“指针”。,如果一个变量专门用来存放另一个变量的地址,则称它为“指针变量”。指针
3、变量的值(即指针变量中存放的值)是指针(地址)。,注意区分“指针”和“指针变量”这两个概念。,四、说明,、程序中定义的每个变量在编译后都占有各自的内存单元,系统是通过内存地址对变量进行存取的;,7/55,、数据所占有的内存单元个数是由其数据类型决定的;,、首地址:即第一个单元的地址;,、表示地址的数与整数的区别;,、变量i、j的地址可能相邻,也可能不相邻,是由系统分配的,我们不必关心。,8/55,8.2 指针变量的定义和引用,8.2.1 概述,1、指针运算符:*,为了表示指针变量和它所指向的变量之间的联系,用“*”表示指向的关系。,如:ip代表指针变量,*ip表示ip所指向的变量。即*ip也代表一个变量。,9/55,例:,、若:ip=,*ip=5;,结论:*ip与i等价。,、x=i+1;,x=*ip+1;,2、取地址运算符:&,它与一个变量连用,以得到该变量的内存地址。,3、说明:,、取地址运算符只能作用于变量:,不能作用于常量、表达式或寄存器变量:,、不能把整数赋值给一个指针变量:ip=3000;,、不能把一个指针变量的值赋值给一个整型变量:x=ip;,10/55,8
4、.2.2 指针变量的定义与赋值,一、指针变量的定义,1、格式:,类型名 *指针变量名;,其中:、“*”表示定义的是指针变量; 、“类型名”用来指定该指针变量可以指向的变量的类型;,2、例:,int i, *ip;,int *p1, *p2;,float x, *xp;,char *cp1, *cp2;,3、说明:,、“*”只表示定义的变量为指针变量,但指针变量名中并不包含“*”;“*“是指针变量的标志,不可丢掉;,、指针变量定义时,指定了它所指向的变量的数据类型;,ip=,p1=,xp=,cp1=,xp=,11/55,指针变量定义时必须指定其所指向的变量的数据类型,而且使用过程中只能指向同一种类型的变量。,、指针变量定义后,系统为变量分配一个存储单元,用来存放地址;根据存储单元的长度分为大存储模式(长指针,4 Byte)和小存储模式(短指针,2 Byte);,、指针变量定义后,若不赋值,其值是不确定的。,二、指针变量的赋值,1、赋值语句:,int i, j, *p1, *p2;,p1=,char ch, *cp1, *cp2;,cp1=,2、初始化:,int x=4;,int x; x
@HASHKFK