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