我试图在C中分配一个2D矩阵,它已经初始化了。我需要它已经初始化,以形成将用于下一个功能后的目录。
矩阵
char matriz2D[8][24] ={{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
{'#','\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '#'},
{'#','\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '#'},
{'#','\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '#'},
{'#','\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '#'},
{'#','\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '#'},
{'#','\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '#'},
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}};
字符串
我该如何分配它?我正在试密码
matriz2D[alocador1][alocador2] =(char**)malloc(sizeof(char));
型
但是编译器抛出错误:
第一个月
如何在内存中分配这个矩阵?
4条答案
按热度按时间yqyhoc1h1#
除了函数
calloc
可以用零初始化已分配的内存之外,您不能动态分配已初始化的数组。因此,首先需要为二维数组分配内存,然后根据需要设置其元素。
要将矩阵动态分配为二维数组,可以编写以下代码,例如
字符串
请注意,与其使用幻数
8
和24
,不如使用命名常量。还要记住,矩阵的元素不包含字符串。68de4m5k2#
有很多方法可以写这个。要走的路取决于你将使用该地区的方式。
第一个问题是矩阵维数是否总是相同
如果
char[8][23]
是你需要的所有东西,我将向你展示一个更简单的编写方法的例子。无论如何,你需要知道
char **
是另一回事,必须仔细构造,就像char ** **
一样。这些都是非常有用的结构,但在这里您可能不需要它们。如果你的用例是更动态的写回,我可以使用
char **
或其他东西发布替代方案。示例输出
字符串
C
示例代码型
typedef
只是为了可读性。print_set()
是如何将区域作为一个整体传递的示例。9njqaruj3#
别让我为难使用结构。
字符串
不强制转换malloc的结果。
如果你准备好接受挑战,那么你可能需要一个指向数组的指针:
型
5t7ly7z54#
您已经分配了矩阵。不是动态的(dynamic)。
考虑到这个矩阵在堆栈上的大小并不禁止,你需要动态分配的唯一原因是如果你在一个函数中 * 创建 * 它,并且需要它在该函数的生命周期中生存。
你的问题暗示了你的问题在于把这个传递给一个函数。当你的矩阵被传递给一个函数时,它会衰减为一个指针,但是什么样的指针呢?它会衰减为一个指向24个字符的数组的指针。
如果你尝试写下面的代码,你会从编译器得到警告,然后在我的测试中,一个分段错误。
个字符
但是,如果你写了下面的代码,那么你的函数参数类型就正确了,并且它可以按预期的方式工作。
型
如果你需要能够传递不同维度的矩阵,我们也可以传递一个
size_t
参数。型
对于您的矩阵,这将被称为:
型