C++的指针问题,来个强人详细解释下

来源:百度知道 编辑:UC知道 时间:2024/05/20 09:09:12
void a(int * i){
*i=9;
}
void b(char * i){
i="abcde";
}
int main(int argc, char* argv[]){
int i=0;
a(&i);
cout<<i<<'\n';
char *c="1234";
b(c);
cout<<c<<'\n';
return 0;
}
为什么输出结果是:
9
1234
两个函数我传的都是指针参数为什么结果不是:
9
abcde
强人请详细解释下,谢谢咯!

调用b(c)后,c的值(也就是"1234"的地址)被赋给了i,
之后 i="abcde"; 将"abcde"的地址赋给了i,只是使i转而指向了"abcde",不和c指向同一地址了,但并没有修改c的值和c指的串的值
于是cout<<c<<'\n';输出的仍是"1234"

字符串不能直接赋值,用strcpy()函数。另外要用字符数组,不能用"1234"这样的常量,这当然不能修改。

这原因很简单,你有没有注意到你编的程序中
对于数字是这样做的:
*i=9;
而对于串是这样的:
i="abcde";
两个i之前差了一个星号。
用传地址的方法来改变参数的值的技巧,其根本就来自于这个星号。
所以后一句要变成
*i="abcde"
但这样变,该函数的参数必须为 char **i
综合起来就是一句根本原理:
想改变什么,就传它的地址。

很很简单.
void a(int * i){
*i=9;
}
*i=9,把指针i所指向的内存上的值改为9.这个i指向的内存就是你传给函数a的参数的指针i的内存了.引用也是同样道理

void b(char * i){
i="abcde";
}
函数里的i不是指针,所以这个i不能对别的数据进行操作.即无影响了.

输出结果应该是:
0
1234
你是不是写错了

主函数中i=0 调用函数a时i只是在函数a中变成了9但cout是再主函数main中执行 i是个局部变量 所以 i还是0
同理 c还是 1234