- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第08章善于利用指针
2010年11月 天津工大 信息学院 褚益清 第8章 指针 8.1 指针是什么 定义一个变量(如 int a),就是向操作系统申请一个存储空间。 a申请成功之后,可以往a中写数据(如 a=3) 当a中写入数据之后,可以从a中读数据(如 b=a+2),也可以再次往a中写入数据 a中的数据用变量“a”名称表示,a的地址用“a”计算得到。 a的地址由系统给定,不能改动,比如a=3000是错误的。 在C语言中,变量的地址,即为指针。但是,说a是a的地址多见,说a是a的指针少见。 可以定义一个特殊的变量,这个变量只能存放某个其他变量的地址。这样的专门用来存放地址的变量称为指针变量,有时简称“指针变量”为“指针”,实质上它们的概念不同。 假设指针变量p里面存放着普通变量a的地址,则一般说成“p指向a”。 可以用指针变量对被它指向的变量读写数据,方法是“*指针变量”,如*p=3,就是向a中写数据3;再如b=*p,就是将a中的数据读出给b。这里的“*”是专门对指针变量求值的运算符(本书取名为“指针运算符”,有的教材取名为“间接寻址运算符”或“间接访问运算符”,不如称为“取值运算符”形象,而且恰好与“取址运算符”对应。)。 8.2 指针变量 8.2.1 例 void main( ) { int a,b,*p; p=a; scanf(%d,p); b=*p*2; p=b; printf(%d %d %d\n,a,b,*p); printf(%u %u %u %u\n,a,b,p,p); getch(); } 8.2.2 怎样定义指针变量 例: int *p; ——指针变量名为p,它只能指向int型变量(它只能存放int型变量的地址,int称为指针p的类型) float *q; ——指针变量名为q,它只能指向float型变量(它只能存放float型变量的地址, float称为指针q的类型) ——定义方法:指针类型 *指针名称。 指针变量如何指向一个普通变量 例: int a, b; int *p,*q; p=a; /* p指向a */ q=b; /* q指向b */ 8.2.3 怎样引用指针变量 引用——访问、读写 假设定义了指针: int *p; 且p指向变量a: p=a; 则: p——就是指针p所指向的变量的地址a *p——间接访问,指针所指地址的数值,即a p——指针变量p自己占用的地址,一般不用。 a——变量a存储单元的存放数据 a ——变量a占用的地址 *a——无意义。严格地说:是以a的值为地址的那个地方的值。 例:用指针访问(间接访问) int a, b,*p,*q; p=a; /* p指向a */ q=b; /* q指向b */ a=3; /* 直接访问 */ b=a; /* 直接访问 */ *p=5; /* 间接访问 */ *q=(*p)*(*p); /* 间接访问 */ 间接访问方法:指针变量前面加“*”号。 例9.2 交换指向问题 #includestdio.h #includeconio.h int main( ) { int *p1,*p2,*p,a,b; p1=a; p2=b; /* 先指向,与教材上次序不同 */ scanf(%d%d,p1,p2); if(ab) {p=p1;p1=p2;p2=p;} /*指针指向交换*/ printf(\na=%d b=%d\n , a, b); printf(max=%d min=%d\n,*p1,*p2); getch(); return 0; } 指针变量(变量)指向谁?可以随便,只要类型匹配。但是绝对不能瞎指!p=3000就是瞎指!定义指针变量时,会隐藏着瞎指,千万小心!瞎指本身不会造成危害,但是瞎指之后给所指地址赋值,就可能造成严重后果。 变量的地址(常量)不能更改! 8.2.4 指针作为函数参数 (当然是形参) 基本性质:以地址作参数。 与数组名作参数相同。 它们都是从主调函数得到一个地址(就是实参所表示的地址)。这个所得到的地址都有可能是一个一系列地址的首地址。这个地址被用于所定义函数(将来的被调用函数)读取数值、或者存放数值。 指针变量作形参时,指针变量的指向可以改动。数组作形参时,数组名所代表的数组起始地址同样可以改动,这与普通定义的数组名不可改变其所代表的地址不同! 例8.3 指针形参交换数值 void swap (int *p1, int *p2) { int temp; temp=*p1; *p1=*p2; *p2=temp; } void main(
文档评论(0)