替换空格
思路:我的想法是先找到原句子中有多少空格,然后再new一个新长度的数组,将str中所有的内容拷贝到新数组中去。 最后将令str指向新数组temp的首地址。 what?不对?难道指针的指向有问题?我跟进去调试发现并没有什么问题,后来我想到了,应该是传参的关系! 还没赋值的时候,两者的地址如下: 执行完这句赋值语句之后,我们发现在函数内部确实实现了我们想要实现的效果: 然而,跳出函数之后,观察到的结果却是这样的: 这是应该怎么解释它呢? 首先我们得理解传指针它到底传的是什么! 如图,我模拟了一张编译器内部的符号表,我们得先明白什么是指针变量,就是它的类型为指针类型,存储的值是实际指向的内存的地址。 即指针变量存储的是地址,而普通的变量存储的是常量,需要使用&取地址符来获得地址。 所以现在可以分析上述错误的原因了,由于传的是地址,str 形参接收的是一个指针变量的值,而且数组是申请连续的内存空间,所以我们可以通过索引或者++,--操作使指针进行偏移, 然后通过 *ptr 给内存赋值,这时我们就改变了内存中的值,实现了指针的作用。 然而我的代码写道 str = temp 只是将指针变量 temp 中的地址赋值给形参 str 并没有改变实参中的值,即没有改变指针指向的内存中的值。 也就是说传指针是一种特殊的传值,只不过我们可以通过这种形参得到的值来取到实际地址中的值。