鱼C论坛

 找回密码
 立即注册
查看: 1752|回复: 6

[已解决]c语言二级,形参与实参替换与指针

[复制链接]
发表于 2022-8-29 11:20:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
(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

为什么带指针的*可以交换,其他的不能换呢。老师说,形参改变,实参不变。不是很懂。
最佳答案
2022-8-29 20:05:05
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内实际的值,其实这个叫引用参数,函数参数前加上& 在函数内修改,就能修改实际的值了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-29 11:21:53 | 显示全部楼层
哇!这代码格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-29 11:45:07 From FishC Mobile | 显示全部楼层
你哪个函数不懂,f3是经典交换函数
f2是经典交换函数失败案例
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-29 20:05:05 | 显示全部楼层    本楼为最佳答案   
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内实际的值,其实这个叫引用参数,函数参数前加上& 在函数内修改,就能修改实际的值了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-30 09:47:53 | 显示全部楼层
zhangjinxuan 发表于 2022-8-29 20:05
f2函数没有用,f2里的char a,char b仅在函数内部有用,就比如:

程序输出:

清楚明白,谢谢大佬。学到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-30 09:49:04 | 显示全部楼层

我是图方便截屏之后,图片转文字了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-30 09:49:34 | 显示全部楼层
wp231957 发表于 2022-8-29 11:45
你哪个函数不懂,f3是经典交换函数
f2是经典交换函数失败案例

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 16:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表