欢迎来到天天文库
浏览记录
ID:50320442
大小:193.50 KB
页数:25页
时间:2020-03-08
《C语言程序设计 教学课件 作者 许薇 武青海 第七章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第七章地址和指针信息工程学院第7章地址和指针指针是C语言中广泛使用的一种数据类型。如果在程序中定义了一个变量,在对程序进行编译时系统会给这个变量分配内存单元,内存单元编号也叫做地址。●地址和指针的概念●指针变量●指向函数的指针●对指针变量的操作●函数之间地址值的传递●通过实参向函数传递函数名或指向函数的指针变量●传给main函数的参数7.1地址和指针的概念在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占4个字节单元,字符型量占1个字节单元等。为了正确地访问这些内存单元,必须为每个内存
2、单元编上号。根据一个内存单元的编号即可准确地找到该内存单元。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。内存单元的指针和内存单元的内容是两个不同的概念,下面用一个通俗的例子来说明它们之间的关系。用户到银行去存取款时,银行工作人员将根据用户的账号去找存款单,找到之后在存单上写入存款、取款的金额。在这里,账号就是存单的指针,存款数是存单的内容。对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容。在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单
3、元的指针。7.2指针变量7.2.1指针变量的定义所谓变量的指针,实际上指变量的地址。变量的地址虽然在形式上好像类似于整数,但在概念上不同于以前介绍过的整数,它属于一种新的数据类型,即指针类型。一般用“指针”来指明这样一个表达式&x的类型,而用“地址”作为它的值,也就是说,若x为一整型变量,则表达式&x的类型是指向整数的指针,而它的值是变量x的地址。同样,若doubled;则&d的类型是指向双精度数d的指针,而&d的值是双精度变量d的地址。所以,指针和地址是用来叙述一个对象的两个方面。虽然&x、&d的值分别是整型变量x和双精度变量d的地址,但&x、&d的类型是不同的,一
4、个是指向整型变量x的指针,而另一个则是指向双精度变量d的指针。在习惯上,很多情况下指针和地址这两个术语混用了。可以用下述方法来定义一个指针类型的变量。int*ip;指针变量的一般定义为类型标识符*标识符;其中标识符是指针变量的名字,标识符前加了“*”号,表示该变量是指针变量;而“类型标识符”表示该指针变量所指向的变量的类型。一个指针变量只能指向同一种类型的变量,也就是说,不能定义一个指针变量,既能指向一整型变量又能指向双精度变量。指针变量在定义中允许带初始化项,例如:inti,*ip=&i;这里是用&i对ip初始化,而不是对*ip初始化。7.2.2指针变量的引用指针变
5、量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。指针变量的赋值只能赋予地址,决不能赋予任何其他数据,否则将引起错误。在C语言中,变量的地址是由编译系统分配的,对用户完全透明,用户不知道变量的具体地址。两个有关的运算符如下。(1)&:取地址运算符。(2)*:指针运算符(或称“间接访问”运算符)。C语言中提供了地址运算符&来表示变量的地址。其一般形式为&变量名;如&a表示变量a的地址,&b表示变量b的地址。设有指向整型变量的指针变量p,如要把整型变量a的地址赋予p可以有以下两种方式。①指针变量初始化
6、的方法。inta;int*p=&a;②赋值语句的方法。inta;int*p;p=&a;不允许把一个数赋予指针变量,故下面的赋值是错误的:int*p;p=1000;被赋值的指针变量前不能再加“*”说明符,如写为*p=&a也是错误的。假设:inti=200,x;int*ip;我们定义了两个整型变量i、x,还定义了一个指向整型数的指针变量ip。i、x中可存放整数,而ip中只能存放整型变量的地址。我们可以把i的地址赋给ip:ip=&i【例7-1】指针变量的使用。main(){inta,b;int*pointer_1,*pointer_2;a=100;b=10;pointer_
7、1=&a;pointer_2=&b;printf("%d,%d",a,b);printf("%d,%d",*pointer_1,*pointer_2);}【例7-2】输入a和b两个整数,按先大后小的顺序输出a和b。main(){int*p1,*p2,*p,a,b;scanf("%d,%d",&a,&b);p1=&a;p2=&b;if(a
此文档下载收益归作者所有