我想使用指定的初始值设定项,但其他未初始化的索引呢?
他们也是在记忆吗?
例如:
编辑部分:{
int array [590] = {[2] = 1};
注意:我没有使用其他数组索引,就像这个例子我想只使用一个,但我会为另一个索引分配内存?
(okey我知道这个例子很模糊,我不想只有一个int或任何其他类型,我不知道如何解释我想要的东西。但我认为解释它没有必要,因为我的问题不是“怎么做到这一点”我的问题是“当我这样做时会发生什么?”或“如何实施?”,非常感谢。)
这个内存怎么样? 我浪费了590块内存,还是只有一块? 如果第一个是正确的,我怎么才能只花一个?
如果我这样做:?
int array [] = {[2] = 1,[590] = 2};
我会分配590块内存,还是只分配两块?
}
非常感谢!
答案 0 :(得分:3)
让我们问一下Compiler先生!
#include <stdio.h>
int main( int argc, char ** argv )
{
int array[] = {[2] = 1, [590] = 2};
printf("sizeof(array) is %d bytes\n", sizeof(array));
}
调查显示:
$ gcc initsize.c
$ ./a.out
sizeof(array) is 2364 bytes
是的! 591 * 4 = 2364。
这里,您在堆栈上分配了一个591元素的整数数组。它有分配;编译器不知道你可以用它做什么(例如,将它传递给它一无所知的库函数)。你告诉它它的大小是591个元素,它服从...
P.S。有许多“稀疏矩阵”C库;只是google的“C库稀疏矩阵”。但是,对于591个元素的向量,它们总是过度杀死。现在,如果你有10,000个这样的向量,那就是另一个故事。
答案 1 :(得分:1)
是的,您使用的声明将创建一个包含5个元素的数组,并且只将其中一个设置为值“1”。其余的将是未初始化的(我相信)。
我认为,你想要的是哈希表或其他类型的关联容器,C在它的标准库中没有。你要么自己写一个,要么找一个别人写的。
答案 2 :(得分:0)
当您声明一个数组时,即使您没有初始化每个元素,也会分配内存。如果你只想存储一个值,你需要一个变量,你也可以使用dinamically分配内存,但它需要一个很好的指针和内存分配/管理函数(malloc,realloc,free等)。