char*,char [],const char*,string之间的区别

在之前我看到string接受字符串没问题,但是用char*接受就会出现这个问题,导致我认为const char*就是string,直到最近我才发现他们之间的区别.

#include<iostream>
using namespace std;
void test()throw() {
	int x = 1;
	if (x==1) {
		throw "字符串";
	}
}
int main() {
	try {
		test();
	}catch ( char * ) {
		cout << "char*" << endl;
	}
	catch (string) {
		cout << "string" << endl;
	}
	catch (...) {
		cout << "未捕捉到指定类型"<<endl;
	}
	system("pause");
}

假如const char*和string是一个东西,那么就会输出string

但是结果是未捕捉到指定类型 

string a = "字符串";
	if (x==1) {
		throw a;
	}

抛出string类型,满意离开.

 

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

进入正题

string是字符串类型,是C++中封装的一个char*类,在C语言中没有字符串,用字符数组去存储。

 

#include<iostream>
using namespace std;
#include<cmath>
int main() {
	char a[] = "abcd";               // 字符数组
	char* p = a;                     //指针p指向数组首元素地址,相当于char*p="abcd" 
	cout << a << "  " << p;
	

}

在之前是可以直接写char*p="abcd"的,但是直接将一个常量字符串赋值给char*是有隐患的(即char*p = "abcd"),它会做如下的操作:

1、在栈区开辟内存放char* p。

2、在文字常量区(即常量存储区)开辟内存放"abcd"。

3、将"abcd"中第一个字符的内存地址赋值给p。

崩溃隐患:当编译strcmp(p, "hello");时系统不会报错,因为符合第一个参数char*第二个参数const char*的参数限制。实际运行时,系统将试图修改文字常量区的内容,而文字常量区属于只读区,进而引发崩溃。

所以现在只能写成const char*p="abcd"。const修饰类型,可以改变指针p的指向,但是不能改变指针指向内存的值,这个涉及到指针常量,常量指针

const放在*后面,可以改变p指向内存的值,但是不能改变指针指向。 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值