或者用单独一个函数en(实现: int len(char *str) dint n=0; while(srt!=0)n++; return n main ichar s80"sale apples."i int m: m=len(s); printf(in lenth: 6d", m); 分析参数传递过程:s=str
◼ 或者用单独一个函数len()实现: int len(char *str) { int n=0; while(*srt!='\0') n++; return n; } main() { char s[80]="sale apples."; int m; m=len(s); printf("\n lenth:%6d", m); } 分析参数传递过程:s => str
例10.6编写函数实现:将数组中的n个整数逆序存放 调用该函数实现将10个整数逆序存放。 maino {inta[10}={1,2,4,6,8,9,75,3,10}i int r void inv(int*q,intn);/函数声明*/ printf("n before inverse: n") for(p=a; p-a+10, pi+) %5:/体用指针访问数组元素* inv(a, 10) printf(" n after inverse n") for(i=0;<10++) print(%5d,a[i])/*用下标访间*
◼ 例10.6编写函数实现:将数组中的n个整数逆序存放。 调用该函数实现将10个整数逆序存放。 main() { int a[10]={1,2,4,6,8,9,7,5,3,10},i; int *p; void inv(int *q , int n); /*函数声明*/ printf("\n before inverse:\n"); for(p=a; p<a+10; p++) printf(“%5d”,*p); /*用指针访问数组元素*/ inv(a , 10); printf(" \n after inverse:\n"); for(i=0;i<10;i++) printf(“%5d”,a[i]);/*用下标访问*/ }
void iny(int*q,intn)/*函数nv()实现逆序* f int*i, j,t for(i=q,j=q+n-; 1<j;1++, {t*1*1=*j;*=t;} return a12 689‖75310 (a)交换前 a[1os579|8|6421 (b)交换后 图10.9
void inv(int *q , int n) /*函数inv( )实现逆序*/ { int *i,*j,t; for(i=q, j=q+n-1; i<j; i++, j--) {t=*i; *i=*j; *j=t;} return; }
3、调用函数invO时,实参与形参的对应关系: 实参:104 形参 结果:指针变量q接收数组a的首地址,即q指向数组a的第一 个数组元素。因此,在函数invO中通过指针变量j改变的是 数组a的元素 函数in)与下面的函数 inver(功能等价 void inver(int b[l, int n) fint i,j, t; for(i=0,j=n-1; i<j; i++,j--) tt=b; b=bl; b[jl=t return, 说明:形参敬组名与指针变量等价。此处用b接收a的首地址, 实现通过数组名b访问数组a 指针法与下标法访问数组的区别:用指针速度快
3、调用函数inv()时,实参与形参的对应关系: 实参: a 10 形参:q n ◼ 结果:指针变量q接收数组a的首地址,即q指向数组a的第一 个数组元素。因此,在函数inv()中通过指针变量i,j改变的是 数组a的元素。 ◼ 函数inv()与下面的函数inver()功能等价: void inver(int b[ ] ,int n) { int i, j, t; for(i=0, j=n-1; i<j; i++, j--) {t=b[i]; b[i]=b[j]; b[j]=t;} return; } 说明:形参数组名与指针变量等价。此处用b接收a的首地址, 实现通过数组名b访问数组a. 指针法与下标法访问数组的区别:用指针速度快