第15讲 指针定义和引用PPT教学课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

printf(" x1=%d,x2=%d\n", x1, x2 );
}
例 两个指针变量交换指向。
main( ) {
int *p1, *p2, *s;
程序运行结果: *p1=10,*p2=20
int x1=10, x2=20; p1=&x1; p2=&x2;
*p1=20,*p2=10
printf("*p1=%d,*p2=%d\n", *p1, *p2 );
P1
a
定义:int a,b;
&a
int *p1, *p2;
P2
b
有: p1 = & a ;
&&bb
p2 = & b;
&a
p2 = & *p1 ;
3.指针变量的初始化
➢格式 类型说明符 *指针变量名1=初始地址值,···;
➢注意: • 指针变量在使用前必须要有确定的值,即指向 一个变量。 例: int i, *ptr1=&i; float *f1=0, *f2=NULL;
4.指针的运算
➢实质:地址的运算。
➢类型: • 指针赋值运算:赋地址运算。 • 指针算术运算: ▪ 指针加(减)一个整数运算。 ▪ 两个指针相减运算。 • 指针关系运算:两个指针比较运算。
I. 指针赋值运算:赋地址运算
例 交换两个指ቤተ መጻሕፍቲ ባይዱ所指向变量的值。程序运行结果:
main( )
*p1=10,*p2=20
*p1=1,*p2=1
p2 = &x2;
printf("*p1=%d,*p2=%d\n", *p1, *p2 );
p2 = p1 ; printf("*p1=%d,*p2=%d\n", *p1, *p2 );
}
例 &和*的混合运用
&和*两个运算符的优先级相同,当混合使用时, 按自右而左的顺序进行运算
第15讲 指针定义和引用
一、指针和地址的概念
1. 内存与地址 2. 指针和指针变量 3. 对内存单元的访问方式
二、指针的运算
1.指针变量的定义 2.指针运算符 3.指针变量的初始化 4.指针的运算
三、指针变量作为函数参数
一、指针和地址的概念
1. 内存与地址
➢存储单元:存放一个字节数据的存储器。 ➢存储单元的内容:存储单元内的数据。 ➢内存地址:存储单元的编号。
例: int
x;
char y ;
float z ;
x = 10 ; y = ‘a’ ; z = 9.8 ;
···
2000
10
2002
a
2003
9.8
2字节 1字节
4字节
2007 ···
2. 指针和指针变量
➢指针:就是变量的内存地址,是一个常量。
➢指针变量:就是存放变量内存地址的变量。
➢变量的指针:变量的地址。 当把某个变量x的地址存入指针变量p后,
p1
i
赋值之后指针P1指向了整型变量i
p2
chr
赋值之后指针P2指向了字符型变量chr
引用运算符──“*”
➢作用:取指针所指向的变量的值。 例: int i=100, *p1; p1=&i; printf(“%d\n”, *p1);
*运算符间接地存取指针变量所指向的变量的值
例: p1 = & i ; *p1 = 10 ;
{ int *p1, *p2, x1=10, x2=20, t; p1=&x1; p2=&x2;
*p1=20,*p2=10 x1=20, x2=10
printf("*p1=%d,*p2=%d\n", *p1, *p2 );
t=x1; x1=x2; x2=t; printf("*p1=%d,*p2=%d\n", *p1, *p2 );
/*将i的地址赋给指针变量pi*/ /*把10存入pi所指的地址(&i)中*/
等同于语句:i = 10 ;
p1
i
&i
10
* p1
例 指针运算符的使用
main( ) {
程序运行结果: *p=50, p=ffe
int a=50,*p;
a=100, a=ffe
/* 声明整型指针变量p */
p=&a;
printf("*p=%d, p=%x\n", *p, p );
➢作用:取变量的地址。 例:int i , *p1 ; p1=&i ;
➢ 注意: 不能对常量、表达式进行”&”运算。 例:下列运算为非法的。 p2=&68; p3=&( i + 1 );
&运算符返回操作对象的内存地址。指针变量通 过&的赋值语句,指向该操作对象。
例: p1 = & i ; /* 将i的地址赋给指针变量p1*/ p2 = & chr ; /* 将chr的地址赋给指针变量p2*/
我们就说这个指针变量p的指针指向该变量x。
指针变量p
变量x
2000
指向
10 2000
3.对内存单元的访问方式:
➢直接访问方式: 通过变量名访问。
➢间接访问方式: 通过变量的指针访问。
二、指针的运算
1.指针变量的定义
➢格式:
类型说明符 *指针变量名1,···; 例: int *p1, *p2;
➢说明:
➢格式:
类型说明符 *指针变量名1,···; 例: int *p1, *p2;
➢说明:
3)指针变量的值表示的是它所指向变量的 地址。若一个指针变量为0 (NULL),表示 该指针为空,说明它没有指向任何变量(存 储单元)。
2.指针运算符
➢取地址运算符 ── “&”
➢指针运算符 ── “*”
取地址运算符──“&”
/* 取指针p所指地址的值 */ *p=100; printf("a=%d,&a=%x\n",a, &a ); }
例 指针运算符的使用
输入:
main( )
12
{
输出:
int *p1, *p2, x1, x2 ;
*p1=1,*p2=2
scanf( "%d%d",&x1, &x2 );
p1 = &x1;
1)指针变量的名是p1和p2 若写成: int *p1, p2; 则p2被定义为整型变量而非整型指针变量。
➢格式:
类型说明符 *指针变量名1,···; 例: int *p1, *p2;
➢说明:
2)指针变量的类型是定义时所规定的指向变 量的类型,如p1、p2只能指向整型变量,不 能指向实型和字符型变量。
s=p2; p2=p1; p1=s; printf("*p1=%d,*p2=%d\n", *p1, *p2 );
}
II. 算术运算:移动指针
➢移动指针:对指针变量进行加上或减去一个整 数、或通过赋值运算,使指针变量指向相邻的 存储单元。
➢指针移动是以它指向的数据类型所占的字节数 为移动单位。
➢只有当指针指向一串连续的存储单元时,指针 的移动才有意义。才可以将一个指针变量与一 个整数n做加减运算。
相关文档
最新文档