【问题标题】:Can we map a array to another array in C, like mapping a file?我们可以将一个数组映射到 C 中的另一个数组,比如映射一个文件吗?
【发布时间】:2014-09-29 10:53:04
【问题描述】:

我有一个数组(一维),其他相同大小的数组不同顺序(会根据程序情况改变)也应该有相同的值。

例如:

array1 = {1,2,3,4,5};

因此array2,应该自动拥有,

array2 = {4,2,3,1,5};

你可以说一些,我想根据我独特的参考来混淆价值观。但是,每当父 array1 更改时,array2 也应该在其各自的索引处更新。甚至可能吗?数组内存映射?循环并保存到其他数组需要时间,因为此操作会重复多次。我不能做 memcpy,因为顺序可能不同。任何指针/帮助/建议将不胜感激。

【问题讨论】:

  • 你的意思是int *array2 = array1 ??
  • 不。顺序会有所不同。正如我在示例中所展示的那样。

标签: c memory-mapping


【解决方案1】:

没有神奇的方法可以做到这一点。您需要做的是将实际值存储在某处,然后通过单独存储的permutation 访问它们。这是一些使用字符串的示例代码,因此排列和值明显不同:

char *strings[] = {"foo", "bar", "baz", "quux"};

size_t memory_order[] = {0, 1, 2, 3};
size_t sorted_order[] = {1, 2, 0, 3};

// Get the k'th element in the memory order:
strings[memory_order[k]];

// Get the k'th element in the sorted order:
strings[sorted_order[k]];

【讨论】:

  • 谢谢。如果我的两个数组的顺序相同,那么它们都可以映射吗? (我想跳过 memcpy,我只想使用映射)
  • @Vishwadeep:你为什么要这么做?只需使用两个指向同一个数组的指针。
  • 是的。只是想学习内存映射。只看内存映射的能力。。有可能吗?
  • 正如您在示例中所建议的那样..这就是我实施的确切方式..我正在寻找其他可能性..
  • @Vishwadeep:完全有可能。
【解决方案2】:

不直接,不。 C 没有指定一种方法来做到这一点(这对我来说很有意义,因为大多数计算机也没有,而且 C 往往相当接近金属)。

解决它的典型方法是手动重新映射,当然:

static const size_t map1to2[] = { 3, 1, 2, 0, 4 };

然后通过重映射访问array2

printf("array2[3] is %d\n", array1[map1to2[3]]);

这会将索引3 映射到0,从而打印1

您可以使用宏使其更易于管理。

【讨论】:

  • 好的。你的建议宏。但是,从计算方面看,负载会一样吗?对吗?
猜你喜欢
  • 2020-08-18
  • 2015-07-14
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 2017-11-16
相关资源
最近更新 更多