您的位置:首页 > 编程语言 > C语言/C++

关于结构体数组的赋值问题

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言