代码之家  ›  专栏  ›  技术社区  ›  drigoSkalWalker

指定的初始值设定项,浪费未使用和不必要的内存?如何只分配阵列中所需的部分?

c
  •  1
  • drigoSkalWalker  · 技术社区  · 16 年前

    我想使用指定的初始值设定项,但是其他没有初始化的索引呢?

    他们也在浪费我的记忆吗?

    int数组[590]={[2]=1};

    注意:我不使用另一个数组索引,像这个例子我只想使用一个,但我会为另一个索引分配内存?

    (好吧,我知道这个例子很模糊,我不想要一个int或任何其他类型,我不知道如何解释我想要的。但我认为没有必要这样解释,因为我的问题不是“如何实现这一点”,而是“当我这样做时会发生什么?”或“它是如何实现的”,非常感谢。)

    我浪费了590块内存,还是只有一块? 如果第一个是正确的,我怎么能只花一个呢?

    如果我这么做:?

    }

    非常感谢!

    3 回复  |  直到 16 年前
        1
  •  3
  •   Kevin Little    16 年前

    我们去问问编译先生吧!

    #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个元素,它服从。。。

    另外,还有 许多的

        2
  •  1
  •   Dean Harding    16 年前

    是的,您使用的声明将创建一个包含5个元素的数组,并且只将其中一个元素的值设置为“1”。其余的将是未初始化的(我相信)。

    我认为,您需要的是一个哈希表或某种其他类型的关联容器,而C的标准库中没有这种容器。你要么自己写,要么找别人写的。

        3
  •  0
  •   Diego Allen Satish Azad    16 年前