[C++学习笔记] - char[]与char*的理解

https://www.cnblogs.com/Fflyqaq/p/12002635.html

示例
int main()
{
	char s1[] = "hi";
	const char* s2 = "hi";

	cout << "*s1: " << static_cast<void*>(&s1) << endl;
	cout << "s1: " << static_cast<const void*>(s1) << endl;
	cout << "*s2: " << static_cast<void*>(&s2) << endl;
	cout << "s2: " << static_cast<const void*>(s2) << endl;

	s1[2] = 'o';
	//s1 = "1111"; // error

	//s2[1] = 'o'; // error
	s2 = "1111";
	cout << "=========================================" << endl;

	cout << "*s1: " << static_cast<void*>(&s1) << endl;
	cout << "s1: " << static_cast<const void*>(s1) << endl;
	cout << "*s2: " << static_cast<void*>(&s2) << endl;
	cout << "s2: " << static_cast<const void*>(s2) << endl;

	char a1[] = "abc";
	char a2[] = "abc";
	const char* a3 = "abc";
	const char* a4 = "abc";
	cout << "=========================================" << endl;
	cout << "*a1: " << static_cast<void*>(&a1) << endl;
	cout << "a1: " << static_cast<const void*>(a1) << endl;
	cout << "*a2: " << static_cast<void*>(&a2) << endl;
	cout << "a2: " << static_cast<const void*>(a2) << endl;
	cout << "*a3: " << static_cast<void*>(&a3) << endl;
	cout << "a3: " << static_cast<const void*>(a3) << endl;
	cout << "*a4: " << static_cast<void*>(&a4) << endl;
	cout << "a4: " << static_cast<const void*>(a4) << endl;
}

运行结果

  1. 对象s1s2的内存地址都没改变。
  2. s2指向的内容的地址变了
  3. s1指向的内容改变了。
  4. s1无法指向新的地址内容,可以修改当前。
  5. s2无法修改当前指向内容,可以重新指向。
  6. char[]指向的内容是拷贝,即使多个对象内容相同,如abc,但他们指向内容的地址不同。
  7. char*指向地址,如果多个对象内容相同,如abc,他们指向的内容地相同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值