(C語言)解析力扣中函數(shù)參數(shù)int **returnColumnSizes
本文將以力扣(59.螺旋數(shù)組)為例,解析力扣返回二維數(shù)組的函數(shù)的參數(shù)int **returnColumnSizes應(yīng)該如何賦值、如何在函數(shù)中創(chuàng)建并返回二維數(shù)組以及如何調(diào)用返回二維數(shù)組的函數(shù),最后給出了完整程序和運行結(jié)果。
generateMatrix函數(shù)參數(shù)解釋
generateMatrix函數(shù)的函數(shù)頭(圖1)

generateMatrix函數(shù)的返回參數(shù)是一個二級指針,指向返回的二維數(shù)組,generateMatrix函數(shù)的第一個參數(shù)是整型參數(shù)n,表示二維數(shù)組的行和列。第二個參數(shù)是整型指針returnSize,表示返回的二維數(shù)組的行數(shù)。第三個參數(shù)是二級整型指針returnColumnSizes,表示返回的二維數(shù)組每一行的列數(shù)。
所以returnColumnSizes應(yīng)該指向一個一維數(shù)組的地址的地址,在主函數(shù)中不知道返回的二維數(shù)組每一行有多少列,于是用一個一維數(shù)組存儲返回的二位數(shù)組每一行的列數(shù),這個一維數(shù)組需要在函數(shù)中動態(tài)分配內(nèi)存,其大小就是返回二維數(shù)組的行數(shù)(圖2)。
*returnColumnSizes與returnColumnSizes[0]等價。

到這里只是完成了讓returnColumnSizes指向一個一維數(shù)組的首地址,想要讓這個一維數(shù)組中存儲返回的二維數(shù)組每一行有多少列,還需要對這個一位數(shù)組賦初值。
二維數(shù)組動態(tài)分配內(nèi)存與returnColumnSizes賦值
可以在動態(tài)分配二維數(shù)組內(nèi)存的同時初始化returnColumnSizes指向的一維數(shù)組。給二維數(shù)組動態(tài)分配內(nèi)存時,
先給每一行的首地址分配空間int** result = (int**)malloc(sizeof(int)*n);
再在分配每一行的空間時將這些地址指向每一行的首地址*(result+i) = (int*)malloc(n * sizeof(int));同時給一維數(shù)組賦初值*((*returnColumnSizes)+i)=n。
*(result+i)與result[i]等價
*((*returnColumnSizes)+i)與(*returnColumnSizes)[i]等價

這里*returnSize=n表示返回的二維數(shù)組的行數(shù)為n行,result就是內(nèi)存動態(tài)分配的二維數(shù)組。
generateMatrix函數(shù)調(diào)用方法
從前面的解析已經(jīng)了解了這個函數(shù)的參數(shù),以及如何在函數(shù)中給這些參數(shù)賦值,接下來將介紹如何在其他函數(shù)中調(diào)用這個函數(shù)。
如(圖4)函數(shù)generateMatrix第一個參數(shù)是整型,定義整型變量m,直接傳入,第二個參數(shù)rem是返回二維數(shù)組的行數(shù),當然也是整型變量,但是需要在函數(shù)中修改變量rem的值,所以傳入的是rem的地址,第三個變量n存儲返回二維數(shù)組每一行的列數(shù),是一個指針,傳入的就是n的地址。函數(shù)返回二維數(shù)組的地址res。
最后使用兩層for循環(huán)輸出后釋放動態(tài)分配的內(nèi)存

最后給出完整程序
運行結(jié)果
