A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



结构体:

    定义语法:
            struct 结构体名{

                成员列表;

            };

        成员之间以分号隔开,最后一个成员也需要加分号

   
    声明结构体变量:

        最常用的方法:
            struct 结构体名 变量名;

            类型 变量名;

            类型 变量名 = 数据;

        在定义结构体的时候同时在大括号后面写变量名


    结构体变量的赋值:

            语法:
                变量名.成员  = 数据;
            例: p.age = 16;
        
   
            声明时就初始化(给所有成员赋值)

                struct 结构体名 变量名 = { 数据1,数据2,数据3....数据n };

            例: struct Person p = { "刘德华",16 };


    结构体变量的取值:
            语法:变量名.成员;

            例:p.age; //取出这个结构体变量age成员的值



    结构体变量他们之间的赋值是值传递:也就是改变了一个变量的值,不会影响另外一个变量


    结构体作为函数的参数:也是值传递

        函数参数的语法:
                返回值类型  函数名(struct 结构体名 形参名){

                     函数体;
                }

        
    所以结构体变量传进去是为了做某种运算或者打印这个结构体

            例:比较两个女朋友的条件,是不是封装成一个函数,把条件最好的那个给返回


    回忆:怎样定义数组

              语法: 类型  数组名[长度];

    根据这个语法,能不能定义结构体数组??

        能!
             语法:  struct 结构体名 数组名[长度];

             例:    struct Person ps[5];//5个长度的struct Person结构体数据


    注意:结构体数组跟普通数组一毛一样的用法,只不过类型看着比较非主流,然后取数组每个元素时还需要点出它的成员

        例: ps[0].name;
             ps[0].age;


    结构体作为函数的返回值:

            语法:struct 结构体名  函数名(参数列表){

                    函数体;
                }
    1:定义一个人类的结构体,并且声明这个类型的数组,长度为3个,并且打印出每个元素的值
    2:写一个函数,返回一个结构体变量,并接收这个返回值,再打印出来

typedef:
        作用:给类型起别名
        语法:typedef 类型 别名;

        例: typedef int i; //那么以后i就等于int

            typedef struct Person pp; //那么以后pp就等于struct Person

        
        注意:一般typedef用在结构体时都是直接在定义结构体的时候就用typedef

        例:
            typedef struct{

                char *color;
                int weight;

            }Dog;

            那么此时,Dog就是这个结构体的类型了

            声明这个结构体的变量:Dog d;

   
        注意:如果定义结构体时加了typedef,那么大括号后面的标示符就是类型了

枚举:


*/

#include <stdio.h>

//结构体定义的例子
struct Person{
   
    char *name;
    int age;
   
}p1,p2; //p1和p2就是这个结构体的变量

typedef struct Person stPerson;//以后stPerson就是struct Person


//直接在定义结构体时就改了名字
typedef struct{
   
    char *color;
    int weight;
   
}Dog,D; //Dog就是这个结构体的类型,D也是结构体类型,如果加了typedef在大括号后面加的标示符都是类型,那么永远无法在定义结构体的时候就声明变量


//测试形参改变
void changePerson(struct Person p){
   
    p.age = 200;
}


//结构体作为函数参数来打印
void printPerson(struct Person p){
   
    printf("%s  %d\n",p.name,p.age);
}

//结构体作为函数的返回值
stPerson getPerson(){ //函数名叫getPerson 返回值类型是:struct Person
   
    struct Person p1 = { "函数生成的",200 };

   
    return p1;
}

int main(int argc, const char * argv[]) {
   
    //用typedef定义的类型来声明结构体数组
    stPerson pArr[5];//这就是一个结构体数组
   
    pArr[0].name = "刘德华";//赋值
   
    Dog bigYellow;
   
    bigYellow.color = "屎黄";
    bigYellow.weight = 20;
   
    D wangCai;
   
    wangCai.color = "金黄";
    wangCai.weight = 20;
   
   
   
    //声明结构体变量时就初始化
    /*
    struct Person p1 = { "刘德华",16 };
   
   
    struct Person p2 = p1;
   
    p2.age = 36;
   
    printf("%d\n",p1.age);//16
   
     //测试形参改变,实参会不会发生改变
    changePerson(p1);
   
    printf("%d\n",p1.age);//16
   
    printPerson(p1);//这个可以打印
   
    printPerson(p2);//也可以打印
    */
   
    //结构体数组
    /*
    struct Person ps[4]; //数组中的每一个元素都是一个结构体变量
   
    ps[0].name = "刘德华";//可以理解为取出来的是一个结构体变量
    ps[0].age = 16;
   

    ps[1] = (struct Person){ "张学友",17 };
   
//    ps[2].name = xxx;
   
//    ps[3] = {xxx,xxx};
   
   
    int nums[5] = {1,2,3,4,5};
   
    //二维数组:一个数组里面每个元素又是一个数组
    int nums2[2][3] = { {1,2,3},{4,5,6}  };
   
   //因为结构体数组中的每一个元素又是一个结构体变量,所以初始化赋值时,必须以结构体变量的初始化方式来赋值
//    struct Person ps2[] = { { "刘德华",16 },{ "张学友",17 },{ "郭富城",18 },{ "花满楼",14 }  };
//   
//    //回顾:数组长度的计算  sizeof(数组名) / sizeof(类型);
//   
//    int len = sizeof(ps2) / sizeof(struct Person);
//   
//    printf("len = %d \n",len);//4
   
//    struct Person ps2[10] = { { "刘德华",16 },{ "张学友",17 },{ "郭富城",18 },{ "花满楼",14 }  }; //部分初始化,其他元素为0
//   
//    //回顾:数组长度的计算  sizeof(数组名) / sizeof(类型);
//   
//    int len = sizeof(ps2) / sizeof(struct Person);
//   
//    printf("len = %d \n",len);//10
     
     */
   
    //验证NULL就是0  NULL == 0 == '\0'
    /*
    if (NULL == 0) {
        
        printf("周老师永恒的帅\n");
        
    }else{
        
        printf("高老师永恒的帅\n");
    }
    */
   
    //调用返回值是结构体的函数
    /*
    struct Person p = getPerson(); //现在p就接收了这个函数返回的结构体变量
   
    printPerson( p );
    */
   
   
    return 0;
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马