[英]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.