数据结构问题

时间:2010-10-29 15:31:23

标签: c arrays data-structures malloc

我做了这样的结构:

struct ponto {
    int x;
    int y;
    int z;
};

1)我可以使用默认值初始化int吗? int var = value;似乎不起作用,编译器说“'='令牌之前的语法错误”或类似的东西。

2)我需要在结构数组中使用其中的几个,但在阅读文件后,我只知道应用程序启动后需要多少。我该如何选择它?

提前致谢

编辑:这么多答案,我很感激。可悲的是,我只能标记一个

7 个答案:

答案 0 :(得分:2)

a)您可以使用

进行初始化
struct pronto p = {1,2,3};

在最近的编译器中(不确定这是多么便携,认为它是C99?)

b)您可以使用malloc分配数组:

struct pronto *array = malloc(sizeof(struct pronto) * NUMBER);

答案 1 :(得分:1)

initialize your structure members to 0,请执行:

struct ponto foo = { 0 };

malloc()正确大小的数组,请执行:

struct ponto *arr = (struct ponto *) malloc(COUNT * sizeof(struct ponto));

完成后,不要忘记free()数组。

答案 2 :(得分:1)

struct ponto* create_and_init_ponto(int n)
{
    struct ponto* array;
    int i;

    array = (struct ponto*)malloc( n * sizeof(struct ponto) );

    for ( i = 0; i < n; ++i )
    {
        array[ i ].x = 0;
        array[ i ].y = 0;
        array[ i ].z = 0;
    }

    return array;
}

答案 3 :(得分:0)

你做了一个结构定义,现在你必须先创建一个该结构的变量,然后才能设置字段:

struct ponto xyz;
xyz.x = 7;

分配足够的空间:

int need_to_have = 24;
struct ponto *pontos = malloc (need_to_have * sizeof(struct ponto));

答案 4 :(得分:0)

  1. 您不能拥有结构成员的“默认”值。没有为结构定义分配空间。您只是创建一个新类型(如内置int)。当您实际定义类型ponto的变量时,将为其分配空间。

  2. 您可以对有多少人进行有根据的猜测,为那么多人分配空间(使用malloc)并继续。如果您发现自己达到了极限,则可以使用realloc功能调整阵列大小。

答案 5 :(得分:0)

1)您不能在语言级别为其元素提供特定结构的默认值,因为C中的所有变量都是未初始化的,除非您明确初始化它们(或者使它们静态/外部在这种情况下)他们是零初始化的。但是,如果你设计你的结构使得全零是一组很好的初始值,你可以像这样初始化:

struct foo myfoo = {0};

{0}用作通用的零初始化程序,适用于任何类型。

如果您需要不同的默认值,最好的方法是使用宏和文档,使用您的结构的代码必须使用宏:

#define FOO_INITIALIZER { 1, 2, 3 }
struct foo myfoo = FOO_INITIALIZER;

2)如果你在开始使用任何结构之前就知道了你需要多少结构,只要你知道这个数字就可以malloc

if (count > SIZE_MAX / sizeof *bar) abort();
struct foo *bar = malloc(count * sizeof *bar);

请注意调用malloc并避免溢出漏洞的正确习惯用法。

如果你不知道在开始使用它们之前你需要的数字,首先要分配一个合适的数字,如果你用完了,请将数字增加一个固定倍数,例如加倍大小是共同而且容易。你想在这里检查溢出。然后使用realloc

答案 6 :(得分:-3)

问题#1:如果需要使用值初始化int:

struct ponto p1;
p1.x = p1.y = p1.z = 3;  // initializing with three

或者,如果要将所有值初始化为0,可以像这样使用memset

memset(&p1, 0, sizeof(struct ponto));

问题2:使用malloc:

struct ponto *ps;
ps = (struct ponto *)malloc(N*sizeof(struct ponto));
// where N is your element count.

这将分配内存以存储N类型的struct ponto元素。之后,您可以使用以下命令初始化其值:

int initvalue = 3; // assuming you want to initialize points with value 3
for (i=0; i<N; i++) {
    ps[i].x = ps[i].y = ps[i].z = initvalue;
}