- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
15指针要点
《解析C程序设计》第2章 简单程序设计 15指针与一维数组 * 新的概念:指针(Pointer) 指针也是一种数据类型 一种特殊的数据类型,这种类型存储的是地址 C/c++的特色 有些复杂但很实用 指针变量与指针常量 指针变量 专门存放地址数据的变量 指针常量 score[i] a[i] ==*(a+i) 指一个固定的地址,例如:数组名 * 两种寻址方式 如何读写内存中的数据? 通过变量的地址访问变量所在的存储单元 两种寻址方式 直接(寻址)访问 直接按变量地址来存取变量内容的访问方式 间接(寻址)访问 通过指针变量来间接存取它所指向的变量的访问方式 房间1 东西 房间2 房间1的钥匙 直接寻址 间接寻址 * 间接寻址访问: int i; int *p; p=i; *p=3; 重点:直接寻址与间接寻址的表示 直接寻址访问: int i; i=3; 2000 0 ┇ 变量 i ┇ 3010 变量pi 地址 数据 变量名 如果能直接寻址那当然就不用间接寻址了,但有时,只能用间接寻址的方法解决问题 ③ 数据类型:int *(指向整型变量的指针) 变量名称:p 变量的初值:i 含义:向系统申请一个动态区的内存空间,用来存储整型指针变量p的初值i,即将p指向了变量i。 通过*p这种形式,实现对变量i的间接引用。 ① ② 2000 3 * 与*操作符 用来取变量的地址 int i, *p;p = i; int *p, a[10];p = a; int *p, a[10];p = a[0]; *用来取指针指向地址的内容 *p = 0; 搞清楚下边的两个赋值 int i, *p=i;/*对指针变量赋值*/ *p=1;/*对指针变量引用的变量I赋值*/ * 读程序-1 void main() {int a=5,b=10; int *pa=a, *pb=b; *pb=-1; printf(“b=%d\n”, *pb); pa=pb; printf(“*pa=%d,*pb=%d”,*pa,*pb); } 读程序的关键: 指针变量指向哪儿? 所指向的变量里存储的数据是多少? 更改的是指针还是指针所指向的变量? a b pa pb 5 10 a b -1 * int i,*p=i; float j,*q=j; p=q; int i; float *p; p=i; int *p; p=100; 必须进行赋值才能引用!否则p指向了哪呢? 一个指针变量不能指向与其类型不同的变量!float又称变量P的基类型 应在类型相同的指针变量之间赋值 int *p; scanf(“%p”,p); *p=100; 指针变量只 存放地址! int *p; *p=100; 对指针变量赋值只能通过求得! * 指针变量与其它类型变量的对比 共性 在内存中占据一定大小的存储单元 先定义,再使用 指针变量的特殊性 指针变量只能存放地址,而不能存放数据 必须初始化后才能使用,否则指向不确定的存储单元 只能指向同一基类型的变量,否则warning. 可参与的运算:加、减、关系、赋值 * 为什么引入指针的概念 指针有如下好处: 为函数提供修改变量值的手段 为C的动态内存分配系统提供支持 可以改善某些子程序的效率 为动态数据结构(如例链表、队列、二叉树等)提供支持 * 主调函数 被调函数 main() { int a, b; a = 5; b = 9; Swap(a, b); printf (a=%d,b=%d,a,b); } void Swap(int *pa, int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } 5 5 a b 实 参 形 参 9 9 x y a b 传数值调用 x y 5 temp 9 5 * 主调函数 被调函数 main() { int a, b; a = 5; b = 9; Swap(a, b); printf(a=%d,b=%d,a,b); } void Swap(int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; } a 实 参 形 参 b x y a b 传地址调用 x y 5 temp 5 a b 9 9 5 地址值 指针的好处之一: 通过将主
文档评论(0)