- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六讲 指针 参考书《C程序设计》第十章 本讲主要内容 指针变量 指向数组元素的指针 字符指针与字符串 指针数组 指向一维数组的指针 多级指针 以指针作为函数参数 指针型函数 指向函数的指针 指针变量 —概念及定义 概念 指针:另一个变量的地址 用于间接访问变量 指针变量: 用于存放地址的变量 指针变量 ——初始化 语法形式 存储类型 数据类型 *指针名=初始地址; 例: int *pa=a; 注意事项 用变量地址作为初值时,该变量必须在指针初始化之前已说明过,且变量类型应与指针类型一致。 可以用一个已赋初值的指针去初始化另一个指针变量。 不能用一个内部 auto 型变量去初始化 static 型指针。 例1 指针的概念 main() { int a; int *pa=a; a=10; printf( a:%d\n,a); printf(*pa:%d\n,*pa); printf( a:%x(HEX)\n,a); printf( pa:%x(HEX)\n,pa); printf(pa:%x(HEX)\n,pa); } 例1 指针的概念 a:10 *pa:10 a:bb4(HEX) pa:bb4(HEX) pa:bb2(HEX) 指针变量----函数参数 main() { int a=5, b=10; void swap(int x,int y); printf(%d,%d\n,a,b); swap(a,b); printf(%d,%d\n,a,b); } 指针变量 -函数参数 指针变量----函数参数 main() { int a=5, b=10; void swap(int x,int y); printf(%d,%d\n,a,b); swap(a,b); printf(%d,%d\n,a,b); } 指针变量 ——算术运算 指针与整数的加减运算 指针 p 加上或减去 n ,其意义是指针当前指向位置的前方或后方第 n 个数据的地址。 这种运算的结果值取决于指针指向的数据类型。 指针加一,减一运算 指向下一个或前一个数据。 例如:y=*px++ 相当于 y=*(px++) (*和++优先级相同,自右向左运算)。 指针变量 ——关系运算和赋值运算 关系运算 指向相同类型数据的指针之间可以进行各种关系运算。 指向不同数据类型的指针,以及指针与一般整数变量之间的关系运算是无意义的。 指针可以和零之间进行等于或不等于的关系运算。例如:p==0或p!=0 赋值运算 向指针变量赋的值必须是地址常量或变量,不能是普通整数。但可以赋值为整数0,表示空指针。 指向数组元素的指针 指向数组元素的指针 定义与赋值 例: int a[10]; int *pa; pa=a[0]; 或 pa=a; 通过指针引用数组元素 经过上述定义及赋值后: *pa就是a[0],*(pa+1)就是a[1],...,*(pa+i)就是a[i]。 a[i], *(pa+i), *(a+i), pa[i]都是等效的。 不能写 a++,因为a是数组首地址是常量。 例2 指针与数组的关系 设一个a数组,整型,有10个元素。用三种方法输出各元素: 1.使用数组下标 2.使用数组名 3.使用指针变量 例2 指针与数组的关系 [使用数组下标] main() { int a[10]; int i; for(i=0; i10; i++) scanf(%d,a[i]); printf(\n); for(i=0; i10; i++) printf(%d,a[i]); } 例2 指针与数组的关系 [使用数组名] main() { int a[10]; int i; for(i=0; i10; i++) scanf(%d,a[i]); printf(\n); for(i=0; i10; i++) printf(%d,*(a+i)); } 例2 指针与数组的关系 [使用指针变量] main() { int a[10]; int *p,i; for(i=0; i10; i++) scanf(%d,a[i]); printf(\n); for(p=a; p(a+10); p++) printf(%d,*p);
文档评论(0)