簡體   English   中英

在 C 中將二維數組作為雙指針傳遞

[英]Passing a 2D array as a double pointer in C

我將如何 go 關於將二維數組傳遞給以下 function

arrayInput(char **inputArray)

然后能夠使用標准二維數組語法訪問數組

inputArray[][]

具體來說,我需要能夠調用atoi(inpuArray[0])將字符數組轉換為 int。 我知道這不是最好的方式,但讓它以這種方式工作是項目要求。

在這種情況下,它不是char的二維數組,而是 char* 指針的數組。 像這樣:

void arrayInput(char **inputArray) {
    printf("%s\n", inputArray[0]);
    printf("%s\n", inputArray[1]);
}

int main() {
    char* strings[] = { "hello", "world" };
    arrayInput(strings);
}

strings的類型是char*[]類型(指向 char 的指針數組),它衰減為char** (指向 char 的指針)。

--

對於真正的 2D 數組,其中行在同一個 memory 緩沖區中連接,第二行的維度需要是類型的一部分。 例如

void arrayInput(int mat[][2]) {
    printf("%d %d\n", mat[0][0], mat[0][1]);
    printf("%d %d\n", mat[1][0], mat[1][1]);
}

int main() {
    int mat[][2] = { {1, 2}, {3, 4} };
    arrayInput(mat);
}

這里mat的類型為int[2][2] ,它衰減為int[][2] (2 int 數組的數組)和int(*)[2] (指向 2 int 數組的指針)。

'arrayInput' function 采用指向指針數組的指針。 這與二維數組不同,二維數組是字符數組。 假設您必須保留原型和數據定義,您可以創建一個點數組來匹配原型。 但是,您需要知道 inputArray 的實際尺寸(示例代碼假定為 N、M)。 此外,代碼假定 inputArray 的每個元素都以 nul 結尾。

// Caller Function
// N, M are needed.
    char inputArray[N][M] ;
// Fill inputArray

    // Temporary array, holding pointer to each element
    char *p[N] ;
    for (int i=0 ; i<N ; i++ ) p[i] = inputArray[i] ;
    arrayInput(p) ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM