//---子函数声明---//
int func1();
int func2(int (func1)()); //形参为函数指针(即指向函数的指针)
//---主函数---//
int main(){
printf("向函数二传递函数一,\n即函数一作为函数二的参数。\n");
printf("%d ",func1());
printf("%d\n",func2(func1));//注意函数名即为函数地址!!!!!!
} //实参为函数名func1或者&func1,两者等价,而非func1()
//---子函数定义---//
int func1(){
return 1;
}
int func2(int (func1)()){ //形参为函数指针(即指向函数的指针)
return func1()+1;
}1值传递就不写了,顾名思义就是把当前的值传到下一个函数中,变量本身的没有发生任何变化
2指针传递,把当前变量指针传到下一个函数,在另外函数里边修改指针的值会修改当前变量值
#include <stdioh>
void func(int p){
p = 9;
return;
}
void swap(int a, int b){ //交换两个变量的值
int temp = a;
a = b;
b = temp;
}
int main(void){
int a = 0;
func(&a); //要修改一个变量,把他的地址传过去
printf("%d",a);//9
int b = 3;int c = 4;
swap(&b,&c);
return 0;
}传值调用和引用调用传值调用和引用调用指的是用于参数传递过程中的一种机制。传值调用中,只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。在引用调用机制里,将实参的地址传递给形参,从表面上看是以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上。
形参的作用是实现主调函数与被调函数之间的联系,通常将函数所处理的数据,影响函数功能的因素或者函数处理的结果作为形参。没有形参的函数在形参表的位置应该写voidmain
函数也可以有形参和返回值,其形参也称为命令行参数,由 *** 作系统在启动程序时初始化,其返回值传递给 *** 作系统。
形参和实参的对照实例(C语言版)main(){int
n;printf("input
number
\n");scanf("%d",&n);s(n);printf("n=%d\n",n);}int
s(int
n){int
i;for(i=n-1;i>=1;i--)n=n+i;printf("n=%d\n",n);}
这个就是2种函数调用方式中的地址传递调用方式(另一种是传值方式)。
下面通过具体的实例来说明传地址调用方式:
#include<stdioh>void swap(int p1, int p2) // 交换两个整数——交换形参值(地址)
{ // 实际上是改变p1与p2所指向的地址
int temp;
temp = p1;
p1 = p2;
p2 = temp;
printf("交换后:x=%d y=%d\n", p1, p2);
}
void main()
{
int x, y;
scanf("%d%d", &x, &y);
swap(&x, &y); // 调用swap函数的时候,是将变量x和y的地址传递进去的,也就是使形参p1和p2分别指向变量x和y的地址,改变的实际上还是x和y的值,只不过是通过地址的变换来实现的
printf("交换前:x=%d y=%d\n", x, y);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)