c语言二级,形参与实参替换与指针
(11)有以下程序:#include <stdio. h>
void f1 (char *a, char b) {char c;c=*a;*a= b; b=c;}
void f2 (char a, char b) {char c;c=a; a= b; b=c;}
void f3 (char *a, char *b) {char c;c=*a;*a=*b; *b=c;}
main ()
{
char t1, t2;
t1=' A'; t2=' B' ;f3 (&t1, &t2) ;putchar (t1);putchar(t2);
t1=' A'; t2=' B'; f2(t1, t2) ;putchar (t1) ;putchar (t2);
t1=' A'; t2=' B';fl (&t1, t2) ; putchar (t1) ;putchar (t2);
printf("\n");
}
程序运行后的输出结果是B
(A) ABBABB
(B)BAABBB
(C)BABABA
(D)BABAAB
为什么带指针的*可以交换,其他的不能换呢。老师说,形参改变,实参不变。不是很懂。 哇!这代码格式
你哪个函数不懂,f3是经典交换函数
f2是经典交换函数失败案例 f2函数没有用,f2里的char a,char b仅在函数内部有用,就比如:
void f1(int a){
a=10;
printf("\n%d\n",a);
}
int main(){
int a=9;
f1(a);
printf("%d",a);
}
程序输出:
10
9
修改f1内部的a起到了作用,但是对main函数没有任何影响
f1函数有作用, 把a赋值给了b,因为a传过去的是个指针,对a进行解引用就可以修改a的值(就比如*a='C');
f3函数有作用,实现了两个元素值的交换,会影响到main函数里实际的值,因为两个参数都是指针
对于两个元素交换,其实还有一种写法,那就是:
void swap(char &a,char &b){
char c=a;
a=b;
b=c;
}
试试运行,很奇妙地发现这修改了main内实际的值,其实这个叫引用参数,函数参数前加上& 在函数内修改,就能修改实际的值了 zhangjinxuan 发表于 2022-8-29 20:05
f2函数没有用,f2里的char a,char b仅在函数内部有用,就比如:
程序输出:
清楚明白,谢谢大佬。学到了{:10_275:} 人造人 发表于 2022-8-29 11:21
哇!这代码格式
{:10_278:}我是图方便截屏之后,图片转文字了{:10_278:} wp231957 发表于 2022-8-29 11:45
你哪个函数不懂,f3是经典交换函数
f2是经典交换函数失败案例
谢谢{:10_275:}
页:
[1]