看如下代码:
最后p的打印结果还是test,之前理解的不透彻,这里传递的不是指针吗,为什么指针变量p的值没有被改变呢?
其实是这样的,指针变量p的地址被当做参数传递到func函数中被形参a接收,形参a的地址重新赋值为hello world。也就是p的地址被赋值了一份给a,然后对a地址重新赋值,指向了hello world字符串常量的地址,压根修改过p地址里面的内容。
看下面打印输出:
可以看到形参a赋值后,变成了常量hello world的地址
那么如何可以做到在函数中修改p的内容呢?
这里我们可以将p地址的地址作为参数传入,然后再函数中对这个二级指针解引用,也就是进行*p运算。而二级指针进行*p运算,得到的就是p的地址。然后将p的地址指向字符串常量hello world的地址,这样p的内容也就随之被改变了。
运行结果如下图: