繁体   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