char* a与char a[]的区别,const char* a与char* const a的区别

请看具体示例

#include<iostream>
using namespace std;

void main(void)
{
	// char* a 与 char a[] 的区别
	char* a = "abcdef";        // a为一指针,其值可以改变。现在a指向的是一常量字符串
	cout << a << endl;
	a = "ghijkl";              // a现在指向另一常量字符串
	//a[0] = 'z';              // a指向的为常量,编译没问题,但运行出现异常
	cout << a << endl;
	cout << sizeof(a) << endl; // 4

	char b[] = "abcdef";       // b为数组首地址,为一常量,其值不可改变。所指内容不是常量字符串
	cout << b << endl;
	//b = "ghijkl";            // 编译无法通过,b为常量,无法为其指定其它值
	b[0] = 'z';
	cout << b << endl;
	cout << sizeof(b) << endl; // 7

	// ------------------------------------------------------------------------------

	// const char* a 与 char* const a 区别
	char c[] = "abcd";
	char d[] = "efgh";
	const char* pC = c;
	//pC[0] = 'z';             // 编译出错,pC为指向常量的指针,做不能修改指针指向的内容
	cout << pC << endl;
	pC = d;
	cout << pC << endl;        // pC指向的内容不能改,但可以修改指向

	char e[] = "abcd";
	char f[] = "efgh";
	char* const pE = e;
	//pE = f;                  // pE为常量指针,不能改变其指向
	pE[0] = 'z';               // pE为常量指针,虽然不能改变其指向,但可以修改指向内容
	cout << pE << endl;

}

// 总结:(1) char* a这种形式:a为指针,可以改变其指向,
//       其所指向的字符串为常量,不能修改其指向的内容。
//       (2) char a[]这种形式,a为数组名,为常量,不能再
//       指向其它字符串,但其指向的内容不是常量字符串,
//       故可以改变。

//       (1) const char* a 为指向常量的指针,所指内容为常量,
//       不能修改,但可以改变其指向,这种形式还与
//       char const * a等价。
//       (2) char* const a 为指针常量,不能改变其指向,但可
//       以修改其指向的内容。
//       (3) const char* const a 为指向常量的常指针,即不能
//       改变其指向,也不能改变其指向的内容


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值