形参是指针变量吗
形参是指针变量吗他们两个有什么关系 本帖最后由 jackz007 于 2019-4-18 14:13 编辑请考察以下代码:
#include <stdio.h>
void fun1(int * p)
{
* p += 8 ;
}
void fun2(int p)
{
p += 20 ;
}
int main(void)
{
int a ;
a = 3 ;
printf("oringinal a = %d\n" , a) ;
fun1(& a) ;
printf("after fun1() a = %d\n" , a) ;
fun2(a) ;
printf("after fun2() a = %d\n" , a) ;
}
形参是指针变量的,代表参数是可以读写的,也就是说,在函数内对参数值的修改会反馈给调用者(如:fun1());如果形参是实体变量,那么这个参数就是只读的,在函数内对参数值的任何修改不会反馈给调用者(如:fun2()),这就是二者的区别。 形参本身是按值传递的,修改形参不会导致实参的变化 请看两个经典函数的案例:
#include<stdio.h>
int add(int a,int b)
{
return a+b;
}
void swap(int a,int b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
int main()
{
int ia=10;
int ib=30;
printf("a+b=%d\n",add(ia,ib));
swap(ia,ib);
printf("交换之后的a=%db=%d\n",ia,ib);
/*
a+b=40 这个等于40 米有问题
交换之后的a=10b=30咦,这个没有实现交换呀 ,好吧,交换函数肯定写错了呀
请按任意键继续. . .
*/
return 0;
} 函数定义的时候的参数叫形参。使用的时候传递的变量或值是实参。
形参有两种情况,一种是值拷贝,另一种是指针或者地址。拷贝的时候,函数中的操作是不能影响实参本身的值的。而指针或者地址方式就能够改变该实参。
页:
[1]