【C++】字符指针的正确赋值和输入输出

如何给一个字符指针 char *p 赋值?我看到很多博客上面写的是这样操作:

 

char *p; 
p="hello"; 

在C语言中这种方式确实是被允许的,但是到c++11中会给出警告(报错):

错误提示的意思是我们将一个字符串常量绑定地址绑定到了一个非常量字符指针上,C语言中隐式转换成了char* ,但是c++就拒绝了这个操作,让人自行承担这个后果,所以我们在定义前加上一个const 即:

const char *p = "This is the address returned by the string";

这样就没什么问题了,但是有时候我们们需要在类中定义,在外部函数中修改,这时我们类比操作先声明再赋值;

const char *p;
p = "kaka";

 虽然 p指向的对象是const,即不能通过 *p = “other object” 来修改对象 ,但是指针 p本身不是常量,依然可以通过更换其指向的地址来达到修改其指向的值

const char *p;
p = "kaka";
p = "other objects";
cout<<p<<endl;

如果是初学者可能不明白为什么 cout<<p; 是输出的整个字符串数组,p不是一个指针吗?是因为 printf 和 cout都对字符数组或者字符指针有重载,即从地址P开始输出字符直到遇到 ‘\0’ 时停止,所以可以这样操作进行手动赋值

	const char * b="kaka";
	cout << b << endl;
	char a[10];
	cin >> a;
	b = a;
	cout << b << endl;

结果:

  • 14
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值