如果想要为指针P开辟一个空间,是不是要&p(P本来是一个指针)这样传递给另一个函数,另一个函数再用二级指针修改才可以?
但我有点迷惑p本来不是一个指针吗?如果直接把P传递过去不用取址符,然后另一个函数也是用一级指针接收这个地址再开辟空间不是可以改修了吗?它又不是值传递。
在函数参数传递中只有值传递。
要看传递的值是什么,如果是一个指针的值那么它就是地址了。否则就是普通的值。
你这里为什么要用二级指针呢?你认为p的值已经是一个地址了所以直接传它的值就可以搞定了。错误就在这里。你想想你为什么还要为p开辟空间。如果p的值已经是你要的地址了那还需要开辟空间吗。所以其实这里要么p的值是null要么是一个随即值,要么是一个地址但不是你要的。那么你把这样的值传过去有什么用呢。 所以这里你要弄清楚我们真正要修改时是哪个的内容。是p所指向的那个内存吗。还是p本身,显然这里要该是p本身的内容。那么你只把p的值传给一个函数这个函数能修改p的内容吗?显然不能了。
所以我们得把p本身的地址传过去。然后才能修改该地址的内容。所以就不得不用二级指针了。
1、通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上。之后就可以通过二维指针直接访问了。
2、参考代码如下,可以看具体注释辅助理解。
用二维指针访问二维数组多用于函数调用。
对于一维数组,如果函数参数为一维指针可以直接用数组名当做函数参数。但是如果函数参数为二维指针,直接用二维数组名做参数会出现访问出错,是因为二维指针和二维数组的访问方式不同造成的,需要如示例代码中做转换。
另外一种常用的方法是利用二维数组的内存连续性将二维数组转为一维数组处理,与本题无关,不做更多描述。