const char* 和char*的一些区别

文章讨论了在C++中使用constchar*和char*作为函数参数时的区别。当尝试将常量字符串赋值给char*时,会导致编译器警告,因为这违反了指针和字符串常量的规则。解决方案是使用constchar*,或者将char*用于字符数组。添加const关键字可以消除警告并确保类型安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看到一个函数,它的参数类型有char*的参数,然后我在传参的时候妄想写一个char*变量来存放字符串,然后把这个变量传入函数中,结果 就是出问题了。

#include <iostream>
#include <string>
using namespace std;
void test(char* c)
{
    cout<<"正常"<<endl;
}
int main() 
{
char*c="hello";   //错误的写法
test(c);  
}

运行后编译器没有输出,还给了我一个警告

然后我给test函数和main主函数里的char*c做了一个小手脚:

#include <iostream>
#include <string>
using namespace std;
void test(const char* c)//const
{
    cout<<"正常"<<endl;
}
int main() 
{
const char*c="hello";   //const
test(c);  
}

然后成功运行了:

那么const char*和char*有什么区别?

在第一个代码里我写的是char*c="hello";

首先,c是一个指针,而且是一个可以随意更改指向和地址存放的内容的指针。

"hello"是一个常量字符串,也就是这个地址里只能存放"hello",不能更改成其他的

这样一来就有问题了,现在我的c指向了"hello",

根据c指向的地址内容可以更改的规则和存放"hello"的地址内容不能更改的规则,这两个规则自相矛盾了

所以编译器会弹出警告。

那么const char* c是一个常量指针,指向一块地址,这块地址里存放的内容应该是常量,不可以被更改的。

这样一来const char*c"hello"的规则不冲突,自然就能正常运行了

但是这样的话函数test()的参数类型也得加上const,如果还想用char*c

那就只能让主函数里的c变成数组

#include <iostream>
#include <string>
using namespace std;
void test(char* c)
{
    cout<<"正常"<<endl;
}
int main() 
{
char c[6]="hello";   
test(c);  
}

这样就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值