简单c语言试题

来源:百度知道 编辑:UC知道 时间:2024/05/22 02:57:32
#include <stdio.h>
void swap1(char a, char b)
{
char c;
c=a; a=b; b=c;
}
void swap2(char *a, char b)
{
char c;
c=*a; *a=b; b=c;
}
void swap3(char *a, char *b)
{
char c;
c=*a; *a=*b; *b=c;
}
main()
{
char a,b;
a=’A’; b=’B’; swap1(a,b); putchar(a); putchar(b);
a=’A’; b=’B’; swap2(&a,b); putchar(a); putchar(b);
a=’A’; b=’B’; swap3(&a,&b); putchar(a); putchar(b);
}
为什么答案是ABBBBA

你得学会区分值传递和址传递,明白了以后就清楚是为什么了。值传递就是将变量的值复制给形参,变量的值并未改变,函数只是拥有一个副本而不是真正的两个原始变量。这就是为什么swap1不会交换a和b的值。而swap2的第一个参数是个引用变量,它是直接对变量a进行操作,同理swap3也是如此。

swap1(a,b); a,b的值不能发生交换; 为数值传递,单项
指针和引用可实现正常交换:
swap2(char *a, char b) ;只有a的值有变动
swap3(char *a, char *b)a,b正常交换

这是c的传值与传地址撒···