字符指针char*用法总结

1、char*指向单个字符

char ch = 'w';
char* pc1 = &ch;
cout << *pc1 << endl;  //w

2、char*指向字符数组

	char arr[] = "abcdef";
	char* pc2 = arr;   //数组首元素地址赋值给指针pc2,指针大小只有4字节不可能放下整个数组
	cout << *pc2 << endl;   //输出是a,说明pc2存放的只是数组首元素地址
	cout << pc2 << endl;    //abcdef ,表示从pc2指向的地址位置开始打印
	cout << arr << endl;    //abcdef

3、char*指向字符串的首地址

	//指针pc3是肯定放不下整个字符串的,把常量字符串首个字符a的地址赋给pc3;常量字符串前必须加const,不能char* pc3 = "abcdef"; 
	const char* pc3 = "abcdef"; 
	cout << *pc3 << endl; //输出是a,说明pc3存放的就只是a地址
	cout << pc3 << endl; //abcdef,表示从pc3指向的地址位置开始打印字符串
	//*pc3 = 'w';   错误,常量字符串不可以修改

字符指针char*用法总结_第1张图片

4、字符数组与常量字符串比较

arr1和arr2分别开辟了一块内存空间,数组名表示数组首元素地址,不同的内存空间arr1和arr2必然是不同的地址;

p1和p2指针指向同一个常量字符串"abcdef",既然是不可修改的常量字符串,那么在整个内存空间就不需要存储两份,所以p1和p2是指向同一字符串的首地址,即字符a的地址;

c/c++会把常量字符串存储到到单独的一个内存区域,当几个指针指向同一字符串时,它们实际会指向同一块内存;但是用相同的常量字符串去初始化不同的数组的时候会开辟不同的内存块;

#include
using namespace std;
int main() {
	char arr1[] = "abcdef";
	char arr2[] = "abcdef";
	const char* p1 = "abcdef";
	const char* p2 = "abcdef";
	if (arr1 == arr2) {     //输出false
		cout << "true" << endl;
	}
	else
	{
		cout << "false" << endl;
	}
	if (p1 == p2) {     //输出true
		cout << "true" << endl;
	}
	else
	{
		cout << "false" << endl;
	}
	system("pause");
	return 0;
}

你可能感兴趣的:(C++,c++,开发语言)