字符指针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';   错误,常量字符串不可以修改

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

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

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

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

#include<iostream>
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;
}

  • 39
    点赞
  • 187
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用它是指向一个char *类型的指针指针char *定义的是一个字符指针,而char **定义的是一个指向字符指针指针。可以这样理解,char **指向的是一个char *类型的指针,而这个指针又指向一个字符。所以,通过char **可以实现对字符指针数组的访问,或者说是对字符串数组的访问。通过多级指针的引用,我们可以间接地访问和修改内存中的数据。123 #### 引用[.reference_title] - *1* [C语言char*和char[]用法区别分析](https://blog.csdn.net/weixin_30296363/article/details/117272848)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* [C语言指针详解,单指针,双重指针(char *和char **)](https://blog.csdn.net/xuexilangren1/article/details/84873954)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *3* [C语言指针**p是什么意思](https://blog.csdn.net/weixin_33796891/article/details/117193747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值