c语言学习之基础知识点介绍(十二):结构体的介绍

一、结构体的介绍

/*
语法:
        struct 结构体名{
            成员列表;
        };
    切记切记有分号!
 
    说明:成员列表就是指你要保存哪些类型的数据。
 
    注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类型。

    因为类型不能保存数据,所以我们要有结构体变量。
语法:
    struct 结构体名 变量名;
变量赋值的语法:
            变量名.成员名 = 数据;
        例: zs.age = 16;
      
  输出结构体:
        注意:没有任何格式化控制符能够一次性输出整个结构体
        我们必须一个成员一个成员的输出
 

  结构体:可以用来保存多个不同类型的数据
        可以把生活中的一些东西,抽象成结构体
*/
//这里只是定义了一个结构体类型
struct person{
    
    float height; //身高
    
    float weight; //体重
    
    int age;  //年龄
    
    char gender;//性别  f代表女 female  m代表男
    
    char name[50]; //姓名
};

int main(int argc, const char * argv[]) {
    
    struct person zs; //变量名:zs    类型:struct person
    
    zs.age = 16;
    
    zs.gender = 'm';
    
    zs.height = 189;
    
    zs.weight = 60;
    
    //zs.name = "张三";  这是错误的
    strcpy(zs.name, "张三");
    
    printf("姓名:%s  年龄%d  性别:%c  身高%.0f\n",zs.name,zs.age,zs.gender,zs.height);
    
    return 0;
}

 

二、结构体的初始化

/*
初始化:
         1、先声明,后赋值
          语法:
                   struct  结构体名 ;
                   变量名.成员名 = 数据; 
          例如:
          struct  UserInfo userInfo;
          userInfo.age = 17;
         
          2、在声明的时候初始化
                a、语法:struct  结构体名  变量名 = {数据1,数据2,数据N};
                例如:struct  UserInfo userInfo = {1,17,"张三"};
                注意:这种方式必须按结构体定义的成员顺序来赋值

                 b、语法:struct  结构体名  变量名 = { .成员名1=数据1, .成员名2=数据2, .成员名N=数据N};
                例如:struct  UserInfo userInfo = {.userId = 1, .age = 17,.userName = "张三"};//一定要按照结构体中变量的顺序来写。

            3.先声明,后一次性赋值
 
            struct  结构体名  变量名;
 
            变量名 = (struct 结构体名){ 数据1,数据2,数据N };
 
             例: struct UserInfo s1;
                      s1 = (struct UserInfo){ 1, 17, "张三"};
*/
//先定义一个结构体
   struct  UserInfo{
    int userId;//编号
    int age;     //年龄
    char UserName[50];   //用户名
   }
#include <string.h>
int main(int argc,const char * argv[]){
      struct  UserInfo userInfo;
      userInfo.age = 17;
      userInfo.userId= 1;     
      strcpy(userInfo.UserName,"张三");
      return 0;
}



    

三、结构体的其他使用

 

/*
 1.可以定义无限个结构体,用法跟之前说的用法完全一样(只不过是多加了几个类型而已)。
 
 2.作用域:结构体定义在哪,那么它的作用域就在它定义的位置,到它所在的作用域结束。
 
 3.在结构体定义的大括号后面写标识符,那么这个标识符就是这个结构体的变量.它的作用域跟它定义结构体的作用域一样 也可以同时定义多个变量,以 , 隔开。
    例:
         struct Person{
             int age;
             char name[50];
         }p3,p4,p5;

 4.结构体名可以省略,这样就叫匿名结构体。
    例:
         struct{
             int age;
             char name[50];
             int test;
         }p2;
        p2就是这个匿名结构体类型的变量,可以在大括号后面写多个变量名;
 
 5.结构体变量之间赋值都是值传递,比如说变量a赋值给变量b,b变了后,a不会改变。
 
 6.结构体作为函数的参数是值传递,也就是说函数内改了形参的值,实参不会改变
 
 7.结构体成员里面还可以定义别的结构体变量。
    //结构体里面某个成员又是结构体变量的三种赋值方式
例如:
    struct Person p1;
    p1.age = 16;
    p1.birthDay.year = 1990;
    p1.birthDay.month = 1;
    p1.birthDay.day = 1;
    struct Person p2 = { 16,"刘德华",{1994,1,1}};
    struct Person p3;
    p3.birthDay = (struct myDate){1994,1,1};
   */
 
struct myDate{
    
    int year;
    int month;
    int day;
};

struct Person{
    
    int age;
    char name[50];
    
    //左边是类型   右边是成员名
    struct myDate birthDay;
    
};


struct Student{
    
    int stuNo;
    char name[50];
};

struct Teacher{
    
    int age;
    int salary;
    char name[50];
};

四、typedef的使用

/*
typedef:给某个类型起别名。
语法:typedef   类型   别名 ;
例如:
 typedef  int  i;
 i num =10;
 printf("%d \n",num);
*/

typedef struct{
    int age;
    char name[50];
}Person; //类型

struct{
    int age;
    char name[50];
}p; //这个p是变量

//当前面加了typedef大括号后面的标识符才是类型,否则都是变量

 

posted @ 2015-11-03 15:39  祁临芯  阅读(1037)  评论(0编辑  收藏  举报
友情链接:初心商城