【发布时间】:2019-01-21 02:11:09
【问题描述】:
这可能是一个愚蠢的问题,但我想知道是否有有效的方法来做到这一点。
情况:
int* array = malloc(n * m * sizeof(int));
//want to convert array into M[n][m]
我现在在做什么:
int** M = malloc(n * sizeof(int*));
for(int i = 0; i < n; i++, array += m)
M[i] = array;
我认为转换不应该如此复杂。是否提供了任何简单的语法 C?我可以声明一个extern M[n][m],然后将其地址设置为数组吗?
(为简单起见,省略了示例中的错误处理和内存管理。只需将其视为某个函数的一部分。)
【问题讨论】:
-
来吧,这是 C,把指针指向你想要的东西
-
@smac89 由于其他原因,我想使用索引 M[a][b] 的语法。
-
@MadPhysicist,我正要发表与上述相同的评论。在这种情况下如何计算:coliru.stacked-crooked.com/a/39e6761edaccd062?这里的大小直到运行时才知道
-
@smac89 与您为任何其他变量计算
i + sp * j的方式相同。当您说int (*p)[sp]时,这意味着对于给定的i、j,将j乘以sp,然后再添加到i并用作偏移量。编译器所做的只是将手动计算的线性偏移量转换为更易于阅读的精美语法。