您好,在函数参数传递中只有值传递。
要看传递的值是什么,如果是一个指针的值那么它就是地址了。否则就是普通的值。
你这里为什么要用二级指针呢?你认为p的值已经是一个地址了所以直接传它的值就可以搞定了。错误就在这里。你想想你为什么还要为p开辟空间。如果p的值已经是你要的地址了那还需要开辟空间吗。所以其实这里要么p的值是null要么是一个随即值,要么是一个地址但不是你要的。那么你把这样的值传过去有什么用呢。 所以这里你要弄清楚我们真正要修改时是哪个的内容。是p所指向的那个内存吗。还是p本身,显然这里要该是p本身的内容。那么你只把p的值传给一个函数这个函数能修改p的内容吗?显然不能了。
所以我们得把p本身的地址传过去。然后才能修改该地址的内容。所以就不得不用二级指针了。
p 是指向num这个二维数组的地址,也就是一个二级指针记住,他是一个地址,当你再他前面写一个星号时,他就可以理解为这个二级指针指向的一级指针,然后再添加一个星号时,就可以理解为这个二级指针指向的值了
num[i]存放的是指向a[i]的指针
num是指向 num[0]的指针
则*p 是num[i]
**p 就是 a[i]