gpt4 book ai didi

c - 遍历转换为一维的二维数组,对角线

转载 作者:行者123 更新时间:2023-11-30 19:05:29 27 4
gpt4 key购买 nike

我想遍历一个已转换为一维的二维方阵。

问题是我想遍历它,就像我在对角条中遍历原始 2D 一样。

该数组是对角数组,我最初使用一维的 malloc 创建它,以避免分配太多内存。

数组的大小:

int Tsize = N*(N+1)/2; //table size -> diagonal array of (N+1)*N/2 elements

int* table = malloc(Tsize*sizeof(int));

我知道这样可以遍历一个扁平的二维数组。

do{
i = row*N + col;
col++;
if (col>N-1){
col = 0;
row++;
}
printf("%d ", x[i]);
} while( row < N);

here是我在对角条中遍历数组时发现的。

对于这个数组:

int x[3][3] = {1, 2, 3,
ø, 4, 5,
ø, ø, 6};

ø:我不会使用该元素。

我创建这个数组:

int k[6] = {1,2,3,4,5,6};

我想像这样遍历它:

1,4,6,2,5,3

你能提出什么建议吗?我被困住了。

最佳答案

当您说将二维数组分配为一维数组时,您所描述的内容称为数组扁平化。扁平化数组实际上是一种常见的安全实践,因为the structure of an array gives you a lot of information on its own ,因此代码被混淆以缓解这种情况。偶the program's control flow itself为了额外的安全性,将被混淆。

要对角遍历一个假设的 3x3 矩阵并展平为大小为 9 的一维数组,您可以从 arr[0] 开始,只需在偏移量上添加 4。这个方法是essentially isomorphic从左上角到右下角迭代矩阵对角线,同时提供一些额外的保密性,因为 it's not as trivial to deduce the structure of the data .

您可以像这样可视化此转换:

  a [0] [1] [2]
[3] [4] [5]
[6] [7] [8]

b [0] [1] [2] [3] [4] [5] [6] [7] [8]

因此,当您迭代第一个数组时,您将嵌套两个 for 循环,表明这是一个二维数组。另一方面,当通过从 0 开始将索引递增 4 来迭代第二个数组时,您将访问第一个数组中的相同元素,但这样做并不会泄露底层结构数据。

这个人为设计的示例对于实际使用来说太微不足道了,但我鼓励您研究一下。如果您有任何疑问,请告诉我。

关于c - 遍历转换为一维的二维数组,对角线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49759846/

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