第11-2讲 指针(指针与函数、数组1)_第1页
第11-2讲 指针(指针与函数、数组1)_第2页
第11-2讲 指针(指针与函数、数组1)_第3页
第11-2讲 指针(指针与函数、数组1)_第4页
第11-2讲 指针(指针与函数、数组1)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

11.指针变量,既可以作为函数的形参,也可以作函数的实参。2.指针变量作实参时,与普通变量一样,也是“值传递”,即将指针变量的值(一个地址)传递给被调用函数的形参(必须是一个指针变量)。指针变量作函数参数

2voidSwap(int*x,int*y){inttemp;temp=*x;*x=*y;*y=temp;}main(){inta,b;a=5;b=9;Swap(&a,&b);printf("a=%d,b=%d",a,b);}

voidSwap(intx,inty){inttemp;temp=x;x=y;y=temp;}main(){inta,b;a=5;b=9;Swap(a,b);printf("a=%d,b=%d",a,b);}程序1程序2编写函数实现两数的互换主调函数被调函数实参形参结果有何不同?3main(){

inta,b;a=5;b=9;Swap(a,b);printf("a=%d,b=%d",a,b);}程序1被调函数voidSwap(intx,inty){

inttemp;temp=x;x=y;y=temp;}ab60006002x8000.......59y95800259.......temp4main(){

inta,b;a=5;b=9;Swap(&a,&b);printf("a=%d,b=%d",a,b);}voidSwap(int*x,int*y){

inttemp;temp=*x;*x=*y;*y=temp;}程序2abx.......59y6002600055.......temp600060028000800295voidSwap(int*p1,int*p2){

int*p;p=p1;/*p1,p2为内部变量*/p1=p2;p2=p;}

请问下列程序的运行结果?main(){

inta,b;a=5;b=9;Swap(&a,&b);printf("a=%d,b=%d",a,b);}abp1.......59p2600260006000.......p6000600280008002600060026voidSwap(int*p1,int*p2){

int*p;*p=*p1;*p1=*p2;*p2=*p;}请问下列程序的运行结果?main(){

inta,b;a=5;b=9;Swap(&a,&b);printf("a=%d,b=%d",a,b);}/*指针p未初始化*/7swap函数的几种错误形式(1/3)参数单向传递voidSwap(intx,inty){

inttemp;temp=x;/*x,y为内部变量*/x=y;y=temp;}8swap函数的几种错误形式(2/3)参数单向传递voidSwap(int*p1,int*p2){

int*p;p=p1;/*p1,p2为内部变量*/p1=p2;p2=p;}9swap函数的几种错误形式(3/3)指针p没有确切地址voidSwap(int*p1,int*p2){

int*p;/*指针p未初始化*/*p=*p1;*p1=*p2;*p2=*p;}

10课后作业阅读教材6.3.2小节11要加课堂练习12二、指针与数组每个数组元素都在内存中占用存储单元,它们都有相应的地址;指针变量可以指向数组和数组元素;13指针与一维数组数组名就是一个指针只是不能修改这个指针的指向指针也可当作数组名使用int*p,a[10];

p=a;数组元素的几种等价引用形式a[i]*(a+i)p[i]*(p+i)60006001600260036004600560066007a[0]a[1]a[2]a[3]aa+1a+260006001600260036004600560066007a[0]a[1]a[2]a[3]app++p++14指向一维数组的指针注意:

p+i和a+i都是数组元素a[i]的地址。*(p+i)和*(a+i)就是数组元素a[i]。指向数组的指标变量也可以带下标,如p[i]=*(p+i)因为a是数组首地址是常量,因此不能赋值运算和其他运算,如a++,a--,a=p都是非法操作。15输入输出数组的全部元素main(){

inta[10];

inti;

for(i=0;i<10;i++)scanf("%d",&a[i]);

for(i=0;i<10;i++)printf("%d",a[i]);}方法1:下标法main(){

inta[10];

int*p,i;

for(p=a;p<(a+10);p++)scanf("%d",p);

for(p=a;p<(a+10);p++)printf("%d",*p);}方法2:指针法是否还有别的写法,要有aa+i16输入输出数组的全部元素main(){

inta[10];

int*p,i;

for(i=0;i<10;i++)scanf("%d",);

for(i=0;i<10;i++)printf("%d",);}方法2:指针法17//prv.cmain(){intdata[7]={1,2,3,4,5,6,7},temp,k,*ph,*pt;ph=data;pt=data+6;while(pt>ph){temp=*ph;*ph=*pt;*pt=temp;ph++;pt--;}for(k=0;k<7;k++)printf(“%d,”,*(data+k));printf(“/n”);}1234567phpt7234561phpt7634521phpt请阅读以下程序,并说出功能76

543

21phpt18【例】有inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a,i;

其中0≤i<10,则对a数组元素不正确的引用是

。A)a[p-a]B)*(&a[i])C)p[i]D)*(*(a+i))答案:D试一试看19数组名作形参时,接收实参数组的起始地址;数组名作实参时,将数组的起始地址传递给形参数组。引入指向数组的指针变量后,数组及指向数组的指针变量作函数参数时,可有4种等价形式(本质上是一种,即地址作函数参数):

再论数组作函数参数实参形参数组名指针变量数组名指针变量数组名数组名指针变量指针变量20例a将数组a中的n个整数依次减1。(1)voidsub(intx[],intn){inti;for(i=0;i<n;i++){x[i]=x[i]-1;}}main(){inti,a[10]={1,2,3,4,5,6,7,8,9,10};

sub(a,10);printf("Thearrayhasbeenchanged:\n");for(i=0;i<10;i++)printf("%d\n",a[i]);printf("\n");}实参与形参均用数组21main() f(int*x,intn){inta[10];{… …f(a,10)}…}

(2)实参形参指针变量数组名aa[0]xa[9]调用函数时,x=&a[0],。通过改变x值,可以指向a数组的任一元素。22例a-1将数组a中的n个整数依次减1。(2)voidsub(int*x,intn){inti;for(i=0;i<n;i++)*(x+i)=*(x+i)-1;

}main(){inti,a[10]={1,2,3,4,5,6,7,8,9,10};

sub(a,10);printf("Thearrayhasbeenchanged:\n");for(i=0;i<10;i++)printf("%d\n",a[i]);printf("\n");}实参用数组,形参用指针变量23main() f(intx[],intn){inta[10],*p;{p=a;… …f(p,10)}…}

(3)实参形参数组名指针变量aa[0],x[0]pa[9],x[9]调用函数时,p的值(a或&a[0])传给x,a和x共享一段内存单元。使x[i]值变化,也就是使a[i]值变化。24voidsub(intx[],intn){inti;for(i=0;i<n;i++)x[i]=x[i]-1;}main(){inti,a[10],*p=a;for(i=0;i<10;i++,p++)scanf("%d",p);

p=a;

sub(p,10);printf("Thearrayhasbeenchanged:\n");for(p=a;p<a+10;p++)printf("%d\n",*p);}实参用指针变量,形参用数组例a-2将数组a中的n个整数依次减1。(3)25main() f(int*x,intn){inta[1

温馨提示

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

评论

0/150

提交评论