关于结构体数组的赋值问题
2017-04-17 14:06
811 查看
最近在练习PAT的题目,有很多字符串数据需要使用二维字符串数组进行存储,处理起来并不是很方便,如果要存储的数据每一行都是规格化的,可以考虑使用一维的结构体数组来处理,以下为一维的结构体数组的使用总结:
考虑到很多题目每个测试用例里的数据数目并不是确定的,换句话说要使用变长一维结构体数组,故使用malloc函数来动态申请内存空间:
1.首先/定义结构体:
typedef struct {
char id[20];
char name[10];
char gender[4];
} student;
2.在main函数中做声明:
int N;
scanf("%d",&N);//获得数组长度
student * students = (student *)malloc(N * sizeof(student));
//在支持C99标准的编译器中,可以直接使用以下方式进行声明:
//student students
;
3.关于以为结构体数组的赋值:
(1)直接使用for循环进行结构体的赋值:
int i;
for(i = 0; i < N; i++)
{
//如果结构体里不是字符串,例如假设id为int型,则&students[i].id
scanf("%s %s %s", students[i].id,students[i].name,students[i].gender);
}
(2) 通过在赋值函数内创建新的结构体并返回赋值:
main()中:
int i ;
char id[20],name[10],gender[4];
for(i = 0; i < N; i++)
{
students[i] = getStruct( );
}
结构体赋值函数:
student getStruct(void)
{
student p;
scanf("%s",p.id);//因为是字符串,不用加取址符&,否则此处为&p.x
scanf("%s",p.name);
scanf("%s",p.gender);
return p;
}
(3) 通过指针赋值:
main()中:
int i ;
char id[20],name[10],gender[4];
for(i = 0; i < N; i++)
{
getStruct(&students[i]);
}
结构体赋值函数:
void getStruct(student * students)
{
scanf("%s",students->id);//因为是字符串,不用加取址符&,若是int,此处为&students->id
scanf("%s",students->name);
scanf("%s",students->gender);
}
考虑到很多题目每个测试用例里的数据数目并不是确定的,换句话说要使用变长一维结构体数组,故使用malloc函数来动态申请内存空间:
1.首先/定义结构体:
typedef struct {
char id[20];
char name[10];
char gender[4];
} student;
2.在main函数中做声明:
int N;
scanf("%d",&N);//获得数组长度
student * students = (student *)malloc(N * sizeof(student));
//在支持C99标准的编译器中,可以直接使用以下方式进行声明:
//student students
;
3.关于以为结构体数组的赋值:
(1)直接使用for循环进行结构体的赋值:
int i;
for(i = 0; i < N; i++)
{
//如果结构体里不是字符串,例如假设id为int型,则&students[i].id
scanf("%s %s %s", students[i].id,students[i].name,students[i].gender);
}
(2) 通过在赋值函数内创建新的结构体并返回赋值:
main()中:
int i ;
char id[20],name[10],gender[4];
for(i = 0; i < N; i++)
{
students[i] = getStruct( );
}
结构体赋值函数:
student getStruct(void)
{
student p;
scanf("%s",p.id);//因为是字符串,不用加取址符&,否则此处为&p.x
scanf("%s",p.name);
scanf("%s",p.gender);
return p;
}
(3) 通过指针赋值:
main()中:
int i ;
char id[20],name[10],gender[4];
for(i = 0; i < N; i++)
{
getStruct(&students[i]);
}
结构体赋值函数:
void getStruct(student * students)
{
scanf("%s",students->id);//因为是字符串,不用加取址符&,若是int,此处为&students->id
scanf("%s",students->name);
scanf("%s",students->gender);
}
相关文章推荐
- 关于结构体数组初始化的问题--深入举例
- 关于字符数组赋值问题
- 一个关于结构体赋值的问题
- 关于包含0长数组的结构体对齐问题(C语言 Linux_x64 GNU编译器)
- 关于结构体里面的字符串指针输出出现乱码的问题与结构体数组作为参数传值的问题
- C语言:字符串、结构体中关于数组的几个问题
- C-关于结构体中字符数组的单个赋值
- C++中 关于结构体中有char *类型的指针 赋值问题
- 数组结构体部分赋值问题
- 关于结构体定义时初始化及结合数组使用问题 示例
- 关于结构体的赋值问题
- 关于memset给整形数组赋值的问题
- 关于java数组中某个元素用等号赋值给中间变量需要注意的问题。
- 关于结构体中零长度数组的问题
- 关于Excel数组赋值出错的问题, 800A03EC 错误
- 小小的C语言问题指针数组赋值----关于指针和数组。
- 关于字符数组赋值问题
- C语言中,关于数组和结构体变量的的默认初值问题
- 结构体中的数组成员的赋值问题
- 关于 将一个数组赋值给另外一个数组会重置原来数组的指针 的问题