我做了这样的结构:
struct ponto {
int x;
int y;
int z;
};
1)我可以使用默认值初始化int吗? int var = value;似乎不起作用,编译器说“'='令牌之前的语法错误”或类似的东西。
2)我需要在结构数组中使用其中的几个,但在阅读文件后,我只知道应用程序启动后需要多少。我该如何选择它?
提前致谢
编辑:这么多答案,我很感激。可悲的是,我只能标记一个答案 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)
答案 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;
}