- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[所有分类]第8章 指针
第8章 指针 变量的指针和指针变量 数组的指针和指向数组的指针变量 字符串指针和指向字符串的指针变量 函数的指针和指向函数的指针变量 返回指针值的函数 指针数组和指向指针的指针 main函数的命令行参数 指针 变量的指针就是它的地址。通过变量的地址能找到该变量在内存中的存储单元,从而得到它的值,称为直接访问。 存放地址的变量叫做指针变量。指向某变量的指针变量存放该变量的首地址,即指向该变量的首字节。通过指针变量得到所指变量的地址,再访问变量,称为间接访问。 指针变量的定义 在一个指针变量中只能存放同一类型变量的地址。指针变量必须先定义,才能使用。定义指针变量的一般形式: 类型 *指针变量名 例如:int *a,*b; 指针变量的赋值 指针变量赋值语句的一般形式: 指针变量名=变量名; 例如: int a,b; int *p1,*p2; p1=a; /*将a的首地址赋给p1 */ p2=b; 指针变量的引用 可以使用以下两个指针相关运算符: 取地址运算符 如:p=a 将a的地址送入p * 指针运算符(间接访问运算符) 如:*p就是p所指向的变量,也就是a。 注意: *p与a等价的前提是p=a;。 例如 main () { int a=10,b=20; int *p1,*p2; p1=a;p2=b; printf(%d,%d\n,a,b); printf(%d,%d\n,m,n); printf(%d,%d\n,*m,*n); } 将两个数从大到小输出。 main () { int a,b,*p1,*p2,*p; scanf(%d,%d,a,b); p1=a;p2=b; if(ab) {p=p1;p1=p2;p2=p;} printf(a=%d,b=%d\n,a,b); printf(%d,%d\n,*p1,*p2); } 指针变量作函数参数 将主调函数变量的地址作为实参,传给被调函数的指针形参。在函数调用的过程中,使形参所指向的变量值发生变化。 将两个变量的内容交换后输出 swap(int *p1,int *p2) {int t; t=*p1;*p1=*p2;*p2=t; } main ( ) {int a,b; scanf(%d,%d,a,b); printf(a=%d,b=%d\n,a,b); swap(a,b); printf(a=%d,b=%d\n,a,b);} 如果想通过函数调用得到n个要改变的值,可以: 1.在主调函数中设n个变量,用n个指针变量指向它们; 2.然后将指针变量作为实参,将这n个变量的地址传给被调函数的形参; 3.通过指针变量,改变这n个变量的值; 主调函数中就可以使用这些改变了值的变量。 数组的指针和指向数组的指针变量 数组元素的指针是数组元素的地址。 数组的指针是指数组的起始地址,即第一个元素的地址。数组名表示数组的起始地址。 例如:int a[10],*p; p=a; 指针也可指向数组中的其它元素 例如: int a[10]; int *p=a[5]; 则p是指向数组元素a[5]的指针,也就是说,p存放的是a[5]的地址。 通过指针引用数组元素 1.可以通过指针为数组元素赋值。 例如:int a[10]; int *p; p=a; a[0]=2 与*p=2等价。 2.指向数组的指针可以指向数组中的其它元素。 例如:int a[10],*p=a; p++; 此时p指向数组a的第二个元素。即p中存放a[1]的地址。 3.指向数组的指针变量也可以带下标。 例如:int a[10],*p=a,i; 可以使用a[i]、*p[i]、(a+i)或*(p+i)引用a数组中第i个元素。 注意:指针移动不能超出数组元素的范围。 输出数组中的数 main ( ) { int a[10],i,*p; for(i=0;i10;i++) a[i]=i; for (p=a;pa+10;p++) printf(%4d,*p); } 注意 ++和*是同优先级,右结合。例如: *m++和*(m++)等价,(*m)++表示m所指向的元素值加1。 数组名可以作为实参传给形参。由于数组名是一个地址值,对应的形参应该是一个数组或一个指针变量。当形参被定义为数组时,C系统按指针变量处理。 求10个数的平均值 float average(float *array) {int i; float aver,sum=
文档评论(0)