c++ | 字符串与指针的恩断情仇

本文讨论了C/C++中的指针难点,强调了从底层到应用过程中思维的转变,特别是如何处理字符串操作,以及常量指针与普通变量的区别。作者建议通过阅读专业书籍和深入思考来理解指针的复杂性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我想,c/c++中难的不是指针,而是其中的变化,尤其是思维的转变。很多东西 就是容易掉进陷阱。好在,你我都是善于思考的码农!

大致情况是这样的,底层<–>c语言<–>c++<–>应用
而数据的传输的最基础媒介就是 字符串,
然后经常是 c 的字符串 <–>c++字符串
举个例子, c++ 中直接用string 定义,而c中只能以最基础的 char 进行延伸

	//请注意  str 是一个 string 类型的对象 如果看源码,就是  通过 char 封装的一个类,(候捷老师有讲过 ,时间久了,有的东西有忘了)
	std::string str = "hello world";
	//   str2 是一个常指针变量,指向 内容  str 而 str 对象 就是在内存一块确定长度的字符数组。补充一句 这一块可以去看 c++primer  plus (记得没错的话,应该是在指针那部份,在前面) 讲的很到位 但我又怕说错 后续会补充
	//简单来说 就是  *str2 这个值 被焊死了 不能通过  *str2 充当变量,但是可以 以常量的身份出现
	const char *str2 = str;

	//所以经典问题出现了
	std::string str1 = "hello123";
	std::string str2 = "hello456";
	
	*str1 = *str2;		//	这是错误的

	str1 = str2;		//这是对的	--> *str1 == "hello456"

	//补充  (字节流输出)
	std::cout<<str2<<std::endl;			// str2是指向 "hello456"的 指针 也就是地址变量 存储的是地址  内容就是  十六进制数字 但是 cout 会输出 该地址在内存的内容  以 '\o' 结尾
	//但是,如果 是 cout<<指向整数的指针<<endl; 会输出该十六进制地址

贴上一些测试
在这里插入图片描述

在这里插入图片描述

#最后总结一下,其实指针 就是纸老虎,他本质就是也是变量 ,只是这个变量是地址类型,是变量,说明也是一个对象,然后需要分配空间,所以要和另个名次,引用做好区分 。引用(取别名)
#然后,复杂的其实 是 指针 和各种各样的 其他因素搅和在一起,所以容易绕进去!
#还有就是,多看专业人士写的书,就像上面提到的那本字典
#多思考,网上很多人的解释,都是基于他们的理解,夹杂主观因素,当然也包括我,后面到具体内容,还是要自己慢慢去吃透!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值