关于const,char *方面的探讨

我们先来看一个程序

#include <stdio.h>

int main()
{
	char * a = NULL;
	char * b = "1234";
	a = b;
	printf("a = %s\n",a);

	return 0;
}

这段程序很简单,就是将指针a指向b指向的字符串。

上面这段代码如果是c,可以编译通过。如果是c++,也可以编译通过,但是会提出警告。"不能将字符串常量转化成char *"。

一般我们使用const char * p= "1234";

#include <stdio.h>

int main()
{
	char * a = NULL;
	char * b = "1234";
	a = b;
	printf("a = %d\n",a[0]);
	a[0] = '2';            //添加
	return 0;
}

然后我们添加一行代码,尝试去修改a指向的值,会报段错误。

因为b指向的值"1234"为常量,是不能被修改的,这个常量被放在了代码段,而一般代码段是不能被修改的。

---------------------------------------------------------------------------------------------------------

如果我们定义了一个空指针,我们想将字符串直接赋给这个指针可以采取strcpy函数。

在上面的例子中,直接使用strcpy是不行的,因为a只是一个空指针,没用空间,他只能指向一个另一个地址,却不能指向一片空间。

所以我们先用new为a分配一片空间,然后就可以执行成功了

#include <stdio.h>
#include <cstring>
int main()
{
	char * a = NULL;
	const char * b = "1234";
	a = new char[10];
	strcpy(a,b);
	printf("a = %s\n",a);

	return 0;
}

接下里分析一下string

string是c++中的类,专门处理字符串。

string.c_str()的返回值是const char * 类型,我们必须定义一个const char *类型的变量才能去接受它。

如果我们想用char *去接受也可以,它强制转化成char *类型的,虽然接受它的类型是char *的,但是我们一旦想要去修改它,还是会报错。

所以,在用指针去处理string.c_str()的值不管用什么类型接受它,都只能做右值。

---------------------------------------------------------

可以采用string的方式接收

int main()
{
	using std::cout;
	using std::endl;
	using std::string;
	string a = "1234";
	string b;
        //b = a;        //这是一定可以的
	b = a.c_str();
	cout << a << endl;
	cout << b << endl;
	return 0;
}

----------------------更新----------------------

const char * const p = "hello"; 

在表示一个常量时,应该使用const char * const p = "hello"; 

在c++ 11中使用char * p = "hello";是不允许的,会报警告。最好还是用const string p = "hello";

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值