在C中将2D数组作为双指针传递

时间:2019-11-02 20:49:31

标签: c function pointers multidimensional-array pass-by-reference

如何将2D数组传递给以下函数

arrayInput(char **inputArray)

然后可以使用标准2D数组语法访问该数组

inputArray[][]

具体来说,我需要能够调用atoi(inpuArray[0])将字符数组转换为int。我知道这并不是最好的方法,但这是项目要求,以这种方式工作。

2 个答案:

答案 0 :(得分:1)

'arrayInput'函数采用一个指向指针数组的指针。这不同于二维数组,二维数组是字符数组。假设您必须保留原型和数据定义,则可以创建一个点数组来匹配原型。但是,您将需要知道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) ;

答案 1 :(得分:1)

在这种情况下,它不是char的2D数组,而是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数组,其中行在同一内存缓冲区中并置,第二行的维必须是该类型的一部分。例如

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数组的指针)。 / p>