#include<iostream>
using namespace std;
void test(char *p)
{ p="B";
}
int main()
{ char p[10]="A";
test(p);
cout<<p;
}
为什么输出的不是B
c++中字符指针作形参出现疑问
答案:3 悬赏:0 手机版
解决时间 2021-04-16 00:28
- 提问者网友:寂寞撕碎了回忆
- 2021-04-15 07:01
最佳答案
- 五星知识达人网友:長槍戰八方
- 2021-04-15 08:29
由于函数声明为void test(char *p); 这种是传值参数,当进行test(p);函数调用时,实参p把它的值,也就是字符串常量"A"的首地址赋值给了形参p,但注意这是形参p是实参p的一个副本,而不是实参p的引用。当执行p="B";时,形参p的值就被改写为字符串常量"B"的首地址,但实参p和形参p是两个独立的变量,因此对形参p的修改不会影响到实参p,所以实参p的值仍然是字符串常量"A"的首地址。由于形参p的作用域是在test函数内,所以当test调用结束,形参p也会被释放掉。当执行cout<<p;是输出的是指向字符数组的首地址指针的值,由于test函数没有改变字符数组的值,所以输出A而不是B。
如果你想输出B的话,可以把函数改为
void test(char *&p)
{ p="B";
}
这是用引用的方式传值。
如果你想输出B的话,可以把函数改为
void test(char *&p)
{ p="B";
}
这是用引用的方式传值。
全部回答
- 1楼网友:未来江山和你
- 2021-04-15 10:11
可以的,比如函数void strp(char *p);
调用的时候可以这样
void main()
{
.....
strp("hello");
.....
}
因为在c和c++中,字符串常量(如"hello")是存放在静态数据区的,它有一个地址,即第一个字符的地址也就是你说的'h'的地址了。
- 2楼网友:玩世
- 2021-04-15 09:53
你test函数内改变的只是形参的值,要改变实参的值应使用引用,即定义成void test(char *&p)。
但是char p[10]="A";这里的p是数组,是不能改变值的,要定义成指针即char *p = "A"才可以。也就是改成:
#include<iostream>
using namespace std;
void test(char *&p)
{ p="B";
}
int main()
{ char *p="A";
test(p);
cout<<p;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯