C语言第8章2善于利用指针_第1页
C语言第8章2善于利用指针_第2页
C语言第8章2善于利用指针_第3页
C语言第8章2善于利用指针_第4页
C语言第8章2善于利用指针_第5页
已阅读5页,还剩181页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、int i=3,j=6,k;printf(“%d”,i);通过变量名通过变量名i找到找到i的地址的地址2000,从而,从而从从存存储单元储单元读读取取3int i=3,j=6,k;k=i+j;从这里取从这里取3将将9送到这里送到这里从这里取从这里取6直接存取直接存取int i=3,j=6,k;定义特殊变量定义特殊变量i_pointer将将i的地址的地址存到这里存到这里间接存取间接存取i_pointer=&i;*i_pointer=50;5050定义两个指针变量定义两个指针变量直接直接输出变量输出变量a和和b的值的值间接间接输出变量输出变量a和和b的值的值此处此处*与类型名在一起。与类型

2、名在一起。此时共同定义指针变量此时共同定义指针变量此处此处*与指针变量一起使用。此与指针变量一起使用。此时时代表指针变量所指向的变量代表指针变量所指向的变量*pointer_1&a; 错误错误pointer_3&a; 错误错误pointer_1&a; 正确正确pointer_32000; 错误错误使使p指向指向a*p相当于相当于a以以八八进制输进制输出出a的地址的地址abp1p2p59&a&b成立成立abp1p2p59&a&b&b&aabp1p2p59&a&b&b&aabp1p2p59&am

3、p;a&b&b&a可否改为可否改为p1=&b; p2=&a;?abpointer_159&a&bpointer_2abpointer_159&a&bpointer_2p1&ap2&b95void swap(int *p1,int *p2) int *temp; *temp=*p1; *p1=*p2; *p2=*temp;错!错!无确定的指向无确定的指向错!错!无法交换无法交换a,bab59xy5995void swap(int *p1,int *p2) int *p; p=p1; p1=p2; p2=p;错

4、!错!只交换形参指向只交换形参指向调用结束后不会调用结束后不会改变指针的指向改变指针的指向交换指针指交换指针指向的变量值向的变量值等价于等价于p=a;等价于等价于int *p=a;或或int *p=&a0;注意注意:数组名数组名a不代表整个数组,不代表整个数组,只代表数组首元素的地址。只代表数组首元素的地址。“p=a;”的作用是的作用是“把把a数组的首元素的地数组的首元素的地址赋给指针变量址赋给指针变量p”,而不是,而不是“把把数组数组a各元素的值赋给各元素的值赋给p”。越界越界(2) 如果的初值为&a0,则p+i和a+i就是数组元素ai的地址,或者说,它们指向a数组序号为i的

5、元素pp+1,a+1 p+i,a+i p+9,a+9 (3) *(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即ai。pp+1,a+1 p+i,a+i p+9,a+9 *(p+i)(4) 如果指针p1和p2都指向同一数组 p2-p1的值是4 不能p1+p2p1p2 scanf(%d,a+i);for(p=a;p(a+10);p+) scanf(%d,p);for(p=a;p(a+10);a+) printf(“%d ”,*a); 错!错!退出循环时退出循环时p指向指向a9后面的存储单元后面的存储单元因此执行此因此执行此循环出问题循环出问题重新执行重新执行p=a;fun(int *a

6、rr,int n)array0arr0array数组数组arrarray3arr3arr+3jijijijiji i+,j=n-1-iai,aj互换void inv(int x ,int n) int temp,*i,*j; i=x; j=x+n-1; for( ; ij; i+,j-) temp=*i; *i=*j; *j=temp; 优化优化#include int main() void inv(int *x,int n); int i, arr10,*p=arr; for(i=0;i10;i+,p+) scanf(“%d”,p); inv(p,10); for(p=arr;p*(x+k

7、) k=j;t=*(x+i);*(x+i)=*(x+k);*(x+k)=t;stringstring+7stringchar *string; string=” I love China!”; stringstringprintf(string b is:%sn“,b); 不能改为不能改为char a=“I love China!”;必须先指向,若写成必须先指向,若写成p=max(a,b); 错错只能指向函数返回只能指向函数返回值为整型且有两个值为整型且有两个整型参数的函数整型参数的函数只看此行只看此行看不出调用哪函数看不出调用哪函数相当于相当于a=f1(i);相当于相当于b=f2(i,j);输入的选项为输入的选项为1时时相当于相当于max(x,y)输入的选项为输入的选项为2时时相当于相当于min(x,y)输入的选项为输入的选项为3时时相当于相当于add(x,y)返回返回k号号学生课程首地址学生课程首地址相当于相当于if(p!=NULL)i=0时时执行后执行后k变为变为3i=1时时执行后执行后k变为变为2i=2时时执行后执行后k变为变为3void print(char *name ,int n) int i=0; char *p; p=name0; while(in) p=*(name+i+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论