C struct类型


struct(结构)数据类型是一种由多种数据类型组成的复合数据类型。


定义struct和访问struct成员

定义struct有3种方式:

struct struct_name {
  data_type1 member_name1;
  data_type2 member_name2;
  ...
};

struct [struct_name] {
  data_type1 member_name1;
  data_type2 member_name2;
  ...
} struct_var1, struct_var2, ...;

typedef struct [struct_name] {
  data_type1 member_name1;
  data_type2 member_name2;
  ...
} struct_date_type;

第1和第2种方式中的struct_name是可选的。

第2种方式,在定义struct类型的同时,可以声明一或多个struct类型的变量struct_var1, struct_var2, ...

第3种方式,在定义struct类型的同时,定义一个新的数据类型struct_data_type

访问struct成员有2种方式:

  • 如果struct_var不是指针变量,使用.操作符,struct_var.member_name
  • 如果struct_pointer是指向struct类型的指针,使用->操作符,struct_pointer->memeber_name

下面是定义struct和访问struct成员的例子:

#include <stdio.h>
int main(int argc, const char * argv[]) {
    struct fruit {
        char *name;
        int size;
    };

    struct fruit f = {"banana", 2};
    printf("fruit name : %s \n", f.name); // banana

    struct  {
        char *name;
        int value;
    } color;

    color.name = "red";
    printf("color name : %s \n", color.name); // red

    typedef struct {
        char *name;
        char *food;
    } pet;

    pet d = {.name = "dog", .food = "bone"};
    printf("pet name : %s \n", d.name); // dog

    return 0;
}

struct数组

struct数组的定义方式和int等基本数据类型一样。

下面是struct数组的例子:

#include <stdio.h>
int main(int argc, const char * argv[]) {
    struct fruit {
        char *name;
        int size;
    };

    struct fruit fruits[2] = {"apple", 1, "banana", 2};
    printf("fruit : %s \n", fruits[1].name);  // banana

    struct  {
        char *name;
        int value;
    } colors[2] = {"red", 2, "blue", 3};

    printf("color : %s \n", colors[1].name);  // blue

    typedef struct {
        char *name;
        char *food;
    } pet;

    pet pets[2] = {"dog", "bone", "cat", "fish"};
    printf("food : %s \n", pets[1].food);   // fish

    return 0;
}

指向struct的指针

指向struct的指针的定义方式和其它指针的定义方式一样。

下面是指向struct的指针的例子:

#include <stdio.h>
int main(int argc, const char * argv[]) {
    struct color {
        char *name;
        int value;
    } c, *p;

    c.name = "red";
    p = &c;
    printf("color : %s \n", p->name); // red

    return 0;
}