当前位置:文档之家› 程序设计基础第8章

程序设计基础第8章





8.1.2 指针的定义、初始化与应用
定义了指针 pi 并赋值后,内存的分配情况如图所示:
pi
*pi
8.1

1000
5
i(1000)


指针变量同普通变量一样,使用之前不仅要定义说

明,而且必须赋予具体的值。在定义指针变量时,可以

给指针变量赋一个初始值,这一过程称为初始化。未经 赋值的指针变量不能使用。指针变量只能赋予地址,不
使用指针变量作参数,在函数执行过程中能够使指针变量所指向的变 量值发生变化,从而在函数调用结束后这些变化后的值得以保存,并在
8.1
主调函数中使用它们。

【例】 指针作为函数参数示例。

参考程序:
运行结果:

void Doub(float *pNum) {
n=20.000000

*pNum=*pNum*2;

op1=&x;

op2=&y; if(x<y)

{op=op1;op1=op2;op2=op;}

/*两个指针变量交换,交换以后,op1指向存放大数的单元,op2指向 存放小数的单元*/

printf("x=%d,y=%d\\n",x,y);

printf("max=%d,min=%d\\n",*op1,*op2);
}
8.1.2 指针的定义、初始化与应用
运行结果: 128↙ 365↙ a=365,b=128 Max=365,min=128
x
op
op1 op2
op1 op2
y
128
op
op1
365
op2
128 365
8.1 指 针 与 指 针 变 量
8.1.3 指针变量作为函数参数
用指针变量作为函数的参数,形参和实参都应当为指针类型数据。
在C语言中,指针是一种特殊的变量,它是存放地址的。假设
8.1
我们定义了一个指针变量i_pointer用来存放整型变量的地址,

它被分配地址为(3010)、(3011)的两个字节。可以通过语句:

i_pointer =&i; 将i的地址(2000)存放到i_pointer中。这时, i_pointer的值就是 (2000) ,即变量i所占用单元的起始地址。要存取变量i的值,

} main()

{ float f=10.0;

Doub (&f);
printf("\nn=%f",f);
}
8.1.3 指针变量作为函数参数
8.1 指 针 与 指 针 变 量
所谓数组的指针是指数组的起始地址,数组元素的指针是 数组元素的地址。
8.2.1 指针数据元素的指针
8.2
一个数组是由连续的一块内存

单元组成的,数组名就是这块连续

内存单元的首地址。一个数组也是 由各个数组元素(下标变量)组成的,

每个数组元素按其类型不同占有几

个连续的内存单元。一个数组元素 的首地址也是指它所占有的几个内

定义指针变量的 一般形式为:
基本类型 *指针变量名;
与 指

下面都是合法的定义: float *op3; /*定义了一个实型指针变量*/ char *op4; /*定义了一个字符型指针变量*/
变 量
8.1.2 指针的定义、初始化与应用
定义指针变量时应注意以下几点:
1 指针变量前面的*表示要定义的是指针变量,而不是
8.1 指针与指针变量 8.2 指针与数据 8.3 指针与函数
8.4 指针与字符串
8.5
指针数组与指向 指针的指针
8.1.1 指针的概念
为了说清楚什么是指针,必须弄清楚数据在内存中是如何存
储的,又是如何读取的。
内存区的每一个字节有一个编号,这就是“地址” 。如果在
8.1
程序中定义了一个变量,在对程序进行编译时,系统就会给这个
与 指
可以采用间接方式:先找到存放“i的地址”的变量i_pointer ,

从中取出i的地址(2000),然后到2000 、 2001字节取出i的值

(3)。

8.1.1 指针的概念
8.1 指 针 与 指 针 变 量
8.1.2 指针的定义、初始化与应用
1.指针变量的定义
8.1
“先定义,后使用”


变量分配内存单元。

按变量地址存取变量值的方式称为“直接访问”方式


例如: printf(″%d″,i);
针 变
scanf(″%d″,&i);

返回
k=i+j;
8.1.1 指针的概念
另一种存取变量值的方式称为“间接访问”的方式。即, 将变量i的地址存放在另一个变量中
8.1







8.1.1 指针的概念

能赋予其它任何数据,否则将引起错误,这时就用到了

指针运算符&和*。
8.1.2 指针的定义、初始化与应用
(1)
Pf 是一个指针变 量,存放了变量f的指 针(也就是变上就是变 量f的值。因此,对 *pf 的赋值会直接改变 变量f的值。
8.1 指
算术运算中的乘号,指针变量名是*后面的标识符。

每定义一个指针变量,就要写一个*。


2
定义指针变量时必须指定其类型。指针数据都是地址,
原本是没有区别的。但不同的变量占据的内存大小不
针 变
同,其适合的操作也不同,在使用指针变量进行间接

访问操作时,必须知道其数据长度及适合运算,因此
必须指定其类型。
8.1.2 指针的定义、初始化与应用
3
各类型的指针变量只能指向同类型的变量。
8.1

2.指针变量的初始化和引用

C语言中有两个地址运算符,分别对应指针变量的两种运算:


&:取地址运算符,运算对象为变量,运算结

果为运算对象的内存地址。 例如:

int i,*pi;

pi=&i; /*pi指向i*/
(2)
8.1
*运算符的优先级比算 术运算符高,
指 针
因此,

*pf+1.0等价于 (*pf)+1.0。




8.1.2 指针的定义、初始化与应用
【例】输入两个整数 x 和 y,比较后降序输出。
include <stdio.h>
8.1
void main()

{
int *op1,*op2,*op,x,yscanf("%d%d",&x,&y);
8.1.2 指针的定义、初始化与应用
8.1
*:间接访问运算符,运算对象为指针变量,在一

个指针变量前加*,表示该指针所指向的内存单元的值。 也就是说,指针变量保存的是一个内存的起始地址,

指针变量加*后表示该地址所对应的存储单元的值。

例如:

*pi=5; /*间接访问pi,即以pi的内容1000为地址的存储 单元的内容为5*/
相关主题