c语言用函数做参数 c语言有参数函数调用例子( 三 )


【例8-9】题目同【例8.7】 。改用数组名作函数参数 。#include stdio.hvoid nzp(int a[5]){int i;printf("\nvalues of array a are:\n");for(i=0;i5;i++){if(a[i]0) a[i]=0;printf("%d ",a[i]);}}int main(void){int b[5],i;printf("\ninput 5 numbers:\n");for(i=0;i5;i++)scanf("%d",b[i]);printf("initial values of array b are:\n");for(i=0;i5;i++)printf("%d ",b[i]);nzp(b);printf("\nlast values of array b are:\n");for(i=0;i5;i++)printf("%d ",b[i]);return 0;}
本程序中函数nzp的形参为整数组a,长度为5 。主函数中实参数组b也为整型,长度也为5 。在主函数中首先输入数组b的值,然后输出数组b的初始值 。然后以数组名b为实参调用nzp函数 。在nzp中,按要求把负值单元清0,并输出形参数组a的值 。返回主函数之后,再次输出数组b的值 。从运行结果可以看出,数组b的初值和终值是不同的 , 数组b的终值和数组a是相同的 。这说明实参形参为同一数组,它们的值同时得以改变 。
用数组名作为函数参数时还应注意以下几点:
①形参数组和实参数组的类型必须一致,否则将引起错误 。
②形参数组和实参数组的长度可以不相同,因为在调用时,只传送首地址而不检查形参数组的长度 。当形参数组的长度与实参数组不一致时 , 虽不至于出现语法错误(编译能通过),但程序执行结果将与实际不符,这是应予以注意的 。
【例8.10】如把例8.9修改如下:#include stdio.hvoid nzp(int a[8]){int i;printf("\nvalues of array aare:\n");for(i=0;i8;i++){if(a[i]0)a[i]=0;printf("%d ",a[i]);}}int main(void){int b[5],i;printf("\ninput 5 numbers:\n");for(i=0;i5;i++)scanf("%d",b[i]);printf("initial values of array b are:\n");for(i=0;i5;i++)printf("%d ",b[i]);nzp(b);printf("\nlast values of array b are:\n");for(i=0;i5;i++)printf("%d ",b[i]);return 0;}
本程序与【例8.9】程序比 , nzp函数的形参数组长度改为8,函数体中,for语句的循环条件也改为i8 。因此,形参数组a和实参数组b的长度不一致 。编译能够通过,但从结果看,数组a的元素a[5]、a[6]、a[7]显然是无意义的 。
③在函数形参表中,允许不给出形参数组的长度,或用一个变量来表示数组元素的个数 。例如,可以写为:
void nzp(int a[])
或写为
void nzp( int a[], int n )
其中形参数组a没有给出长度,而由n值动态地表示数组的长度 。n的值由主调函数的实参进行传送 。由此,【例8-10】又可改为【例8-11】的形式 。
【例8-11】复制纯文本新窗口
#include stdio.hvoid nzp(int a[],int n){int i;printf("\nvalues of array a are:\n");for(i=0;in;i++){if(a[i]0) a[i]=0;printf("%d ",a[i]);}}int main(void){int b[5],i;printf("\ninput 5 numbers:\n");for(i=0;i5;i++)scanf("%d",b[i]);printf("initial values of array b are:\n");for(i=0;i5;i++)printf("%d ",b[i]);nzp(b,5);printf("\nlast values of array b are:\n");for(i=0;i5;i++)printf("%d ",b[i]);return 0;}
c语言向函数传递函数作为参数#include stdio.h
//---子函数声明---//
int func1();
int func2(int (*func1)());//形参为函数指针(即指向函数c语言用函数做参数的指针)
//---主函数---//
int main(){
printf("向函数二传递函数一c语言用函数做参数,\n即函数一作为函数二c语言用函数做参数的参数 。\n");
printf("%d ",func1());
printf("%d\n",func2(func1));//注意函数名即为函数地址c语言用函数做参数!c语言用函数做参数?。。。。?
}//实参为函数名func1或者func1,两者等价 , 而非func1()
//---子函数定义---//
int func1(){
return 1;
}
int func2(int (*func1)()){//形参为函数指针(即指向函数的指针)
return func1()+1;
}
C语言函数参数汇编代码gcc:
第一个问题的汇编:

推荐阅读