- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第15讲 指针定义和引用 一、指针和地址的概念 1. 内存与地址 2. 指针和指针变量 3. 对内存单元的访问方式 二、指针的运算 1.指针变量的定义 2.指针运算符 3.指针变量的初始化 4.指针的运算 三、指针变量作为函数参数 1. 内存与地址 存储单元:存放一个字节数据的存储器。 存储单元的内容:存储单元内的数据。 内存地址:存储单元的编号。 2. 指针和指针变量 指针:就是变量的内存地址,是一个常量。 指针变量:就是存放变量内存地址的变量。 变量的指针:变量的地址。 当把某个变量x的地址存入指针变量p后,我们就说这个指针变量p的指针指向该变量x。 3.对内存单元的访问方式: 直接访问方式: 通过变量名访问。 间接访问方式: 通过变量的指针访问。 1.指针变量的定义 格式: 类型说明符 *指针变量名1,··· ; 例: int *p1, *p2; 说明: 1)指针变量的名是p1和p2 若写成: int *p1, p2; 则p2被定义为整型变量而非整型指针变量。 格式: 类型说明符 *指针变量名1,···; 例: int *p1, *p2; 说明: 2)指针变量的类型是定义时所规定的指向变量的类型,如p1、p2只能指向整型变量,不能指向实型和字符型变量。 格式: 类型说明符 *指针变量名1,···; 例: int *p1, *p2; 说明: 3)指针变量的值表示的是它所指向变量的地址。若一个指针变量为0 (NULL),表示该指针为空,说明它没有指向任何变量(存储单元)。 2.指针运算符 取地址运算符 ── “” 指针运算符 ── “*” 取地址运算符──“” 作用:取变量的地址。 例:int i , *p1 ; p1=i ; 注意: 不能对常量、表达式进行””运算。 例:下列运算为非法的。 p2=68; p3=( i + 1 ); 引用运算符──“*” 作用:取指针所指向的变量的值。 例: int i=100, *p1; p1=i; printf(“%d\n”, *p1); 例 指针运算符的使用 main( ) { int a=50,*p; /* 声明整型指针变量p */ p=a; printf(*p=%d, p=%x\n, *p, p ); /* 取指针p所指地址的值 */ *p=100; printf(a=%d,a=%x\n,a, a ); } 例 指针运算符的使用 main( ) { int *p1, *p2, x1, x2 ; scanf( %d%d,x1, x2 ); p1 = x1; p2 = x2; printf(*p1=%d,*p2=%d\n, *p1, *p2 ); p2 = p1 ; printf(*p1=%d,*p2=%d\n, *p1, *p2 ); } 3.指针变量的初始化 格式 类型说明符 *指针变量名1=初始地址值,···; 注意: 指针变量在使用前必须要有确定的值,即指向一个变量。 例: int i, *ptr1=i; float *f1=0, *f2=NULL; 4.指针的运算 实质:地址的运算。 类型: 指针赋值运算:赋地址运算。 指针算术运算: 指针加(减)一个整数运算。 两个指针相减运算。 指针关系运算:两个指针比较运算。 指针赋值运算:赋地址运算 例 交换两个指针所指向变量的值。 main( ) { int *p1, *p2, x1=10, x2=20, t; p1=x1; p2=x2; printf(*p1=%d,*p2=%d\n, *p1, *p2 ); t=x1; x1=x2; x2=t; printf(*p1=%d,*p2=%d\n, *p1, *p2 ); printf( x1=%d,x2=%d\n, x1, x2 ); } 例 两个指针变量交换指向。 main( ) { int *p1, *p2, *s; int x1=10, x2=20; p1=x1;
文档评论(0)