C++指针与函数的问题,帮忙解释一下结果,为什么结果的第二行是XX而不是YX?
#include<iostream>usingnamespacestd;voidfun(chara,char*b);voidfun(char*a,char*b);void...
#include <iostream>
using namespace std;
void fun(char a,char *b);
void fun(char* a,char* b);
void fun(char &a,char &b);
int main( )
{ char x='X',y='Y';
fun(&x,&y);
cout<<x<<y<<endl;
x='X',y='Y';
fun(x,&y);
cout<<x<<y<<endl;
x='X',y='Y';
fun(x,y);
cout<<x<<y<<endl;
return 0;
}
void fun(char a,char *b)
{ char c;
c=a;a=*b;*b=c;
}
void fun(char* a,char* b)
{ char c;
c=*a; *a=*b; *b=c;
}
void fun(char &a,char &b)
{ char c;
c=a; a=b; b=c;
} 展开
using namespace std;
void fun(char a,char *b);
void fun(char* a,char* b);
void fun(char &a,char &b);
int main( )
{ char x='X',y='Y';
fun(&x,&y);
cout<<x<<y<<endl;
x='X',y='Y';
fun(x,&y);
cout<<x<<y<<endl;
x='X',y='Y';
fun(x,y);
cout<<x<<y<<endl;
return 0;
}
void fun(char a,char *b)
{ char c;
c=a;a=*b;*b=c;
}
void fun(char* a,char* b)
{ char c;
c=*a; *a=*b; *b=c;
}
void fun(char &a,char &b)
{ char c;
c=a; a=b; b=c;
} 展开
5个回答
展开全部
void fun(char a,char *b)
{ char c;
c=a;a=*b;*b=c;
}//调用这个函数, fun(x,&y);
//它会重新分配变量a,c,指针变量b,再把x的值赋予a,把y的地址赋予b
//当执行c=a='x';a=*b='y';*b='x';(b指向y的地址,所以y的值更改为'x'
//当调用完函数后,函数中的变量c,a,b分配的存储空间会被释放,它是局部自动变量
//所以main函数中的x依然为'x',而y通过调用函数而把它的值更改为'x'
{ char c;
c=a;a=*b;*b=c;
}//调用这个函数, fun(x,&y);
//它会重新分配变量a,c,指针变量b,再把x的值赋予a,把y的地址赋予b
//当执行c=a='x';a=*b='y';*b='x';(b指向y的地址,所以y的值更改为'x'
//当调用完函数后,函数中的变量c,a,b分配的存储空间会被释放,它是局部自动变量
//所以main函数中的x依然为'x',而y通过调用函数而把它的值更改为'x'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C++函数有取值以及取址之分,前者不会改变原来的值,后者则相反。在第一个函数后x,y的值互换,但是在第二个函数中第一个参数是取值,不会改变原来的值,而第二个参数是取址,改变了原来的值
void fun(char a,char *b)
{ char c;
c=a;a=*b;*b=c;
}a的值不会变,而b的值变成了a的值
void fun(char a,char *b)
{ char c;
c=a;a=*b;*b=c;
}a的值不会变,而b的值变成了a的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
x='X',y='Y';
fun(x,&y);
cout<<x<<y<<endl;
调用的是
void fun(char a,char *b)
{ char c;
c=a;a=*b;*b=c;
}
因为函数参数的传递是值传递,函数中修改参数的值的,不会影响传入的变量的值。
比如c=a;不会导致a的值发生修改
而char *b 是一个指针,*b=c表示修改 b指针指向内存的值,由于b指针指向的地址是变量y的地址,因此修改该地址的的会导致变量y的值发生修改
指针懂的话,你就一定懂的。
fun(x,&y);
cout<<x<<y<<endl;
调用的是
void fun(char a,char *b)
{ char c;
c=a;a=*b;*b=c;
}
因为函数参数的传递是值传递,函数中修改参数的值的,不会影响传入的变量的值。
比如c=a;不会导致a的值发生修改
而char *b 是一个指针,*b=c表示修改 b指针指向内存的值,由于b指针指向的地址是变量y的地址,因此修改该地址的的会导致变量y的值发生修改
指针懂的话,你就一定懂的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-04-21
展开全部
第二行:
x='X',y='Y';
fun(x,&y);
cout<<x<<y<<endl;
其中调用void fun(char a,char *b)
char a是传值,不会改变实参,char *b是传地址,会改变实参
x='X',y='Y';
fun(x,&y);
cout<<x<<y<<endl;
其中调用void fun(char a,char *b)
char a是传值,不会改变实参,char *b是传地址,会改变实参
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询