重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C语言没有引用类型的。 不信你可以找个纯正的C编译器试试,准给你报错。
创新互联主营钦北网站建设的网络公司,主营网站建设方案,重庆APP软件开发,钦北h5微信小程序开发搭建,钦北网站营销推广欢迎钦北等地区企业咨询
形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。 形参和实参的功能是作数据传送。发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。
2.实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。
3.实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。
4.函数调用中发生的数据传送是单向的。 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
#includestdio.h
void func(char *,char *B);
void main()
{
char A[10];
char B[10];
scanf("%s",A);
func(A,B);
printf("%s\n",B);//输出B
}
void func(char *A,char *B)
{
printf("%c\n",A[0]);
B[0]=A[1];
B[1]='\0';//字符串结尾为\0;
}
int a(int x){//这个x就是形参,就是你定义的变量名称
.........
}
int main(){
int y=5;
a(y);//具体的变量y就是实参
a(z);//z也是实参,就是实实在在的值
}
#includeiostream
using namespace std;
void swap(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
main()
{
int a=3,b=5;
cout "before ‘swap’:a="a",b="bendl;
swap(a,b);
cout"after ‘swap’:a="a",b="bendl;
}
这个例子是传值调用, 意思就是 形参 的 改变不会影响 实参的值。
你运行一下可知 主函数调用了swap函数后 a,b的值并没有发生交换。
原因是,调用swap函数时 编译器为 swap(int a,int b) 中的形参 a , b单独分配内存空间,并接受主函数传递来的值,这块内存空间和 main()函数中的 a ,b 不是同一内存空间。 所以在swap(int a,int b) 中 a , b发生了交换,但main函数中a , b没发生交换。即主调函数与被调函数的操作对象各不相同,参数仅在调用时由实参向形参传递,而不可由形参向实参传递。
要使a ,b发生交换 需要使用传址调用。程序改为如下:
#includeiostream
using namespace std;
void swap(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
cout"in ‘swap’:a="a",b="bendl;
}
main()
{
int a=3,b=5;
cout "before ‘swap’:a="a",b="bendl;
swap(a,b);
cout"after ‘swap’:a="a",b="bendl;
}
引用可以看作是一个变量的别名,使用 引用 时 ,对于void swap(int a,int b) 编译器并没有给形参a,b分配新的内存空间,只是使 形参a,b指向了main函数中实参a,b的内存空间,他们共享同一内空间,即把地址给了形参。所以在void swap(int a,int b)函数中对这块内存的改变也就改变了实参的值。
除了使用引用,也可以使用指针。
指针方式和引用方式都属于传址调用。