学点 C 语言(25): 数据类型 - 结构数组与结构指针


1. 结构数组:

#include <stdio.h>



int main(void)

{

    struct Rec {int x,y;};



    struct Rec rs[10];

    

    size_t i;

    for (i = 0; i < sizeof rs/sizeof rs[0]; i++) {

        rs[i].x = i;

        rs[i].y = i * 2;    

    }



    for (i = 0; i < sizeof rs/sizeof rs[0]; i++) {

        printf("%d, %d\n", rs[i].x, rs[i].y);    

    }

    

    getchar();

    return 0;

}


 
   

#include <stdio.h>



int main(void)

{

    struct Rec {

        char  name[12];

        short age;

    } rs[3] = {

                {"AAA", 11},

                {"BBB", 22},

                {"CCC", 22}

              };



 

    size_t i;



    for (i = 0; i < sizeof rs/sizeof rs[0]; i++) {

        printf("%s, %d\n", rs[i].name, rs[i].age);    

    }

    

    getchar();

    return 0;

}


 
   

2. 结构指针指向已存在的结构数组:

#include <stdio.h>



int main(void)

{

    struct Rec {

        char  name[12];

        short age;

    } rs[3] = {

                {"AAA", 11},

                {"BBB", 22},

                {"CCC", 22}

              };



    struct Rec *p = rs;

 

    printf("%s, %d\n", p->name, p->age);

    printf("%s, %d\n", (p+1)->name, (p+1)->age);

    printf("%s, %d\n", (p+2)->name, (p+2)->age);

    

    getchar();

    return 0;

}


 
   

3. 结构指针(单个结构):

#include <stdio.h>

#include <stdlib.h>

#include <string.h>



int main(void)

{

    struct Rec {

        char  name[12];

        short age;

    };



    struct Rec *p = NULL;

 

    p = (struct Rec *)malloc(sizeof(struct Rec));



    stpcpy(p->name, "ABC");

    p->age = 99;



    printf("%s, %d\n", p->name, p->age);

    printf("%s, %d\n", (*p).name, (*p).age);



    free(p);     

    

    getchar();

    return 0;

}


 
   

4. 结构指针(多个结构):

#include <stdio.h>

#include <stdlib.h>



int main(void)

{

    struct Rec {

        int x;

        int y;

    } *p;



    size_t i, count = 10;



    p = (struct Rec *)malloc(sizeof(struct Rec)*count);



    for (i = 0; i < count; i++) {

        (p+i)->x = i;

        (p+i)->y = i * i;

    }



    for (i = 0; i < count; i++) {

        printf("%d, %d\n", (p+i)->x, (p+i)->y);    

    }



    free(p);     

    

    getchar();

    return 0;

}


 
   

5. 连续的多个结构不就是结构数组了吗?(同上例)

#include <stdio.h>

#include <stdlib.h>



int main(void)

{

    struct Rec {

        int x;

        int y;

    } *p;



    size_t i, count = 10;



    p = (struct Rec *)malloc(sizeof(struct Rec)*count);



    for (i = 0; i < count; i++) {

        p[i].x = i;

        p[i].y = i * i;

    }



    for (i = 0; i < count; i++) {

        printf("%d, %d\n", p[i].x, p[i].y);    

    }



    free(p);     

    

    getchar();

    return 0;

}


 
   

你可能感兴趣的:(数据类型)