定长度1:
#include <stdio.h>
#include <stdlib.h>
typedef struct str
{
int a;
int b;
}Str;
int main()
{
Str s[1]={{a:1,b:2}};//注意这里的冒号
printf("a=%d\nb=%d\n",s[0].a,s[0].b);
}
不定长度2:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
typedef struct
{
int a;
char b[56];
}Str;
Str * mk(int *l){
int i;
char tmp[32];
*l=4;
Str *strs =(Str *) calloc(*l, sizeof(Str));//这里用sizeof(Str *),每个成员间隔也会是60,但是valgrind会在i=1的位置报错,其它位置不报错,这个问题我完全不理解
for(i=0;i<*l;i++) {
printf("====>>>>>>>>>>>>>>> %d, %x\n", i, strs+i);
(strs+i)->a = i;
sprintf(tmp, "t_%d", i);
strcpy((strs+i)->b, tmp);
printf("====>>>>>>>>>>>>>>> %d end\n", i);
}
return strs;
}
int main()
{
printf("%d,%d-%d--\n", sizeof(Str*), sizeof(Str**), sizeof(Str));
int l,i;
Str* strs=mk(&l);
for(i=0;i<l;i++){
printf("%d => %d, %s;...\n", i, (strs+i)->a, (strs+i)->b);
}
free(strs);
}
16行,我本来写的sizeof(Str *),能正常运行,但valgrind却报一个错,原因至今没搞清楚;
仔细想来,因为我想搞一个结构体数组,那么,有多少个结构体,我就应该分配多少个份*一个结构体需要的空间,一次性分配够,释放时也一次性释放;
以前我总想着要多少个成员,就分配多少个指针,再给每个指针指向的地方分配足够的内存,结果虽然但复杂,容易出错。