欢迎来到天天文库
浏览记录
ID:40238591
大小:596.50 KB
页数:95页
时间:2019-07-28
《C语言程序设计基础与实训教程 第9章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第9章指针第页主要内容指针和地址的概念变量的指针和指向变量的指针变量数组的指针和指向数组的指针变量字符串的指针和指向字符串的指针变量函数的指针和指向函数的指针变量返回指针值的函数指针数组和指向指针的指针第页9.1指针和地址的概念如果在程序中定义了一个变量,在编译时系统根据程序中定义的变量类型,给这个变量分配一定长度的内存单元。例如,一般微型计算机使用的C系统为整型变量分配2个字节,为实型变量分配4个字节,为字符型变量分配1个字节。内存区的每一个字节有一个编号,这就是“地址”,相当于旅馆的房间号。在地址所标志的内存单元中存放数据,相当于在旅馆的各个房间中
2、居住旅客一样。第页9.1指针和地址的概念在程序中一般是通过变量名来对内存单元进行存取操作的。但是实际上,程序经过编译后,将变量名转换成变量的地址,对变量值的存取是通过地址进行的。所以,需要弄清楚内存单元的地址与内存单元的内容这两个概念。第页9.1指针和地址的概念2000200220043000…2000……369内存用户数据区变量i变量j变量k变量i_pointer内存单元假设程序已定义了3个整型变量i、j、k,编译时系统分配2000和2001两个字节给变量i,分配2002和2003两个字节给变量j,分配2004和2005两个字节给变量k。那么,pri
3、ntf("%d",i)是这样执行的:根据变量名与地址的对应关系(这个对应关系是在编译时分配存储单元确定的),找到变量i的地址2000,然后从由2000开始的两个字节中取出数据(即变量的值3),把它输出。如果用scanf("%d",&i)输入,执行时,就把从键盘输入的值送到地址为2000开始的整型存储单元中。如果有语句“k=i+j”,则从2000、2001字节取出i的值(3),再从2002、2003字节取出j的值(6),将它们相加后再将其和(9)送到k所占用的2004、2005字节单元中去。这种按变量地址存取变量值的方式称为“直接访问”方式。第页9.1指
4、针和地址的概念还可以采用另一种称为“间接访问”的方式。将变量i的地址存放在另一个变量中,按C语言的规定,可以在程序中定义整型变量、实型变量、字符变量等,也可以定义这样一种特殊的变量,它是存放地址的。如定义一个变量i_pointer,用来存放整型变量的地址,它被分配为3000、3001字节。可以通过下面语句将i的地址(2000)存放到i_pointer中:i_pointer=&I;第页9.1指针和地址的概念这时,i_pointer的值就是2000,即变量i所占用单元的起始地址。要存取变量i的值,也可以采用间接方式:先找到存放“i的地址”的变量,从中取出i
5、的地址(2000),然后到2000、2001字节取出i的值(3)。打个比方,为了开一个A抽屉,有两种办法:一种是将A钥匙带在身上,需要时直接找出该钥匙打开抽屉,取出所需的东西;另一种是为安全起见,将该A钥匙放到另一抽屉B中锁起来。如果需要打开A抽屉,就需要先找出B钥匙,打开B抽屉,取出A钥匙,再打开A抽屉,取出A抽屉中的东西,这就是“间接访问”。第页9.2变量的指针和指向变量的指针变量指针变量的定义指针变量的引用指针变量作为函数参数第页9.2.1指针变量的定义C语言规定所有变量在使用前必须定义,指定其类型,并按此分配内存单元。指针变量不同于整型变量和其
6、他类型的变量,它是用来专门存放地址的,必须将它定义为指针类型。第页9.2.1指针变量的定义例如:inti,j;int*pointer1,*pointer2;第一行定义整型变量i和j,第二行定义指向整型变量的指针变量pointer1和pointer2。第二行中左端的int是在定义指针变量时指定的“基类型”。指针变量的基类型用来指定该指针变量可以指向的变量的类型。例如,上面定义的指针变量pointer1和pointer2可以用来指向整型变量i和j,但不能指向实型变量a和b。定义指针变量的一般形式为:基类型*指针变量名第页9.2.1指针变量的定义例如:flo
7、at*pointer3;/*pointer3是指向实型变量的指针变量*/char*pointer4;/*pointer4是指向字符型变量的指针变量*/在定义了指针变量后,就可以建立指针变量和变量的“指向”关系了。例如,有以下变量定义:floata;charc;则下面的赋值语句就可以建立指针变量和变量的“指向”关系了:pointer3=&a;pointer4=&c;第页9.2.1指针变量的定义其含义是:将变量a的地址存放到指针变量pointer3中,将变量c的地址存放到指针变量pointer4中,这样,pointer3就“指向”了变量a,pointer4
8、就“指向”了变量c。但是,在定义指针变量时需要注意:指针变量前的“*”只是定义指针变量的一个标
此文档下载收益归作者所有