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

最近在练习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[N];



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语言,c语言)