C语言 - 结构体

2017-04-25  本文已影响22人  KKWong

什么是结构体

结构体是C编程中的一种用户自定义的可用的数据类型,它允许你存储不同的数据类型项. 在我个人的理解中,C语言中用结构体来保存一个数据类型就好像是面向对象编程中模型层的数据模型,同样的都是保存不同的类型数据项.

定义结构体

定义结构体,必须使用struct关键字,下面是定义结构体的普遍格式.

struct [structure tag]{
      member definition;
      member definition;
      .....
      member definition;
} [one or more structure variables];

在上面定义结构体的格式中, [structure tag]结构体的名字是可选的, [one or more structure variables]结构体变量也是可选的.但是,必须注意的是[structure tag]和[one or more structure variables]必须出现一个.

struct Person1{
    
    char name[20]; //[20]指定字符串的长度
    char sexy[20];
    int  age;
};

struct Person2{
    
    char name[20];
    char sexy[20];
    int  age;
    
}person2;

struct {
    char name[20];
    char sexy[20];
    int  age;
}person3;

struct {
    char name[20];
    char sexy[20];
    int  age;
}person4 = {"lisi","male",13};

struct Person5{
    char name[20];
    char sexy[20];
    int  age;
    struct Person5 per5;
}person[5];

struct {
    char name[20];
    char sexy[20];
    int  age;
    
}person6[2] = {{"zhangsan","male",23},{"wangwu","male",33}};

访问结构体成员

使用struct name varName来创建一个结构体变量,使用点语法来访问结构体的成员

void person1(void){
    //创建并初始化结构体变量
    struct Person1 per = {"chensheng","male",34};
    //访问结构体变量
    printf("per name = %s, per sexy = %s, per age = %d \n",per.name,per.sexy,per.age);
    
}

void person2(void){
    
    struct Person2 person2 = {"wuguang","male",56};
    printf("person2 name = %s, person2 sexy = %s, person2 age = %d \n",person2.name,person2.sexy,person2.age);
}


void person3(void){
    //这也是一种赋值方法
    strcpy(person3.name,"zhangsanfeng");
    strcpy(person3.sexy,"male");
    person3.age = 23;
    printf("person3 name = %s, person3 sexy = %s, person3 age = %d \n",person3.name,person3.sexy,person3.age);

}

结构体作为参数

您可以把结构作为函数参数,传参方式与其他类型的变量或指针类似。

//声明一个结构体并初始化
struct Person4{
    char name[20];
    char sexy[20];
    int  age;
}person4 = {"lisi","male",13};
//声明一个函数
void person7(struct Person4 per);

int main(int argc, const char * argv[]) {
    
    //把结构体的变量传递出去
    person77(person4);
    
    return 0;
}

void person7(struct Person4 per){
    
    printf("per name = %s, per sexy = %s, per age = %d \n",per.name,per.sexy,per.age);
    
}

也可以通过把结构体指向指针,以指针的方式作为参数进行传递.注意如果结构体是指针的话,那么就要通过 -> 这个符号来访问结构体成员了.

struct Person4{
    char name[20];
    char sexy[20];
    int  age;
}person4 = {"lisi","male",13};

void person77(struct Person4 *per);


int main(int argc, const char * argv[]) {
    
    person77(&person4);
    
    return 0;
}

void person77(struct Person4 *per){
    
    printf("per name = %s, per sexy = %s, per age = %d \n",per->name,per->sexy,per->age);
    
}
上一篇 下一篇

猜你喜欢

热点阅读