gpt4 book ai didi

c - 当编译时宽度未知时,如何编写接受二维数组的函数?

转载 作者:行者123 更新时间:2023-11-30 20:15:44 25 4
gpt4 key购买 nike

当编译时宽度未知时,是否可以编写一个接受二维数组的函数?

详细的描述将不胜感激。

最佳答案

您无法传递原始二维数组,因为例程不知道如何索引特定元素。二维数组实际上是一个连续的内存段。

当您编写x[a][b](当x是二维数组时)时,编译器知道查看地址(x + a * width + b)。如果您不告诉它宽度,它就无法知道如何寻址特定元素。

例如,检查 http://www.dfstermole.net/OAC/harray2.html#offset (其中有一个表格显示如何查找 int[5][4] 中每个元素的线性索引)

有两种方法可以解决该限制:

1) 让您的程序使用指针到指针 (char *)。这与 char[][] 不同。 char * 实际上是一个内存段,每个值都是另一个内存段的内存地址。

2) 传递一个一维指针,然后自己进行引用。然后,您的函数必须采用“宽度”参数,并且您可以使用上述公式来引用特定点

给出一个代码示例:

#include <stdio.h>
int get2(int *x) { return x[2]; }
int main() {
int y[2][2] = {{11,12},{21,22}};
printf("%d\n", get2((int *)y));
}

这应该打印出 21,因为 y 在内存中被布局为 { 11, 12, 21, 22 }。

关于c - 当编译时宽度未知时,如何编写接受二维数组的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17171494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com