gpt4 book ai didi

c - 恢复具有多个索引范围的大型数组的元素

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:58 24 4
gpt4 key购买 nike

这是一个棘手的问题,我一直在思考很长时间,但至今仍未在任何地方看到满意的答案。假设我有一个大小为 10000 的大型 int 数组。我可以通过以下方式简单地声明它:

 int main()
{

int foo[10000];

int i;
int n;
n = sizeof(foo) / sizeof(int);

for (i = 0; i < n; i++)
{
printf("Index %d is %d\n",i,foo[i] );
}

return 0;
}

很明显,在我正式初始化它们之前,数组中的每个索引都将包含一组随机数字:

Index 0 is 0
Index 1 is 0
Index 2 is 0
Index 3 is 0
.
.
.
Index 6087 is 0
Index 6088 is 1377050464
Index 6089 is 32767
Index 6090 is 1680893034
.
.
.
Index 9996 is 0
Index 9997 is 0
Index 9998 is 0
Index 9999 is 0

然后假设我用值对整个程序保持特定值并且必须保留的值初始化我的数组的选择索引范围,目标是将这些值传递给后续对某些函数的操作:

//Call this block 1
foo[0] = 0;
foo[1] = 7;
foo[2] = 99;
foo[3] = 0;

//Call this block 2
foo[9996] = 0;
foo[9997] = 444;
foo[9998] = 2;
foo[9999] = 0;

for (i = 0; i < (What goes here?); i++)
{
//I must pass in only those values initialized to select indices of foo[] (Blocks 1 and 2 uncorrupted)

//How to recover those values to pass into foo_func()?

foo_func(foo[]);
}

在我自己正式初始化数组之前,我初始化 foo[] 的一些值与数组中预先存在的值重叠。鉴于有多个索引范围,我如何才能只传递我初始化的数组元素的索引?我就是想不通。感谢您提供的所有帮助!

编辑:

我还应该提到,数组本身将从 .txt 文件中读取。为了便于说明,我只是在代码中展示了初始化。

最佳答案

有很多方法可以在初始化时或之后快速将数组中的内存清零。

对于堆栈上的数组,用零初始化它。 {0} 是它的简写。

int foo[10000] = {0};

对于堆上的数组,使用calloc分配内存并用 0 初始化它。

int *foo = calloc(10000, sizeof(int));

如果数组已经存在,使用memset用零快速覆盖数组的所有内存。

memset(foo, 0, sizeof(int) * 10000);

现在所有元素都为零。您可以将各个元素一一设置为您喜欢的任何内容。例如……

int main() {
int foo[10] = {0};

foo[1] = 7;
foo[2] = 99;
foo[7] = 444;
foo[8] = 2;

for( int i = 0; i < 10; i++ ) {
printf("%d - %d\n", i, foo[i]);
}
}

这将打印...

0 - 0
1 - 7
2 - 99
3 - 0
4 - 0
5 - 0
6 - 0
7 - 444
8 - 2
9 - 0

附带说明一下,仅使用大型数组的几个元素是一种内存浪费。相反,使用 hash table ,或者如果您需要订购,某种类型的 tree .这些可能很难正确实现,但是 a library such as GLib can provide you with good implementations .

关于c - 恢复具有多个索引范围的大型数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50554490/

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