黑马程序员技术交流社区

标题: IOS基础第十三天(三)笔记较长,分4次发,版主莫警告 [打印本页]

作者: dushoupeng    时间: 2015-7-11 10:10
标题: IOS基础第十三天(三)笔记较长,分4次发,版主莫警告

结构体的嵌套:


        结构体定义中,结构体的成员又是另外一个结构体变量


    结构体的嵌套的注意事项:


        1)结构体定义中可以嵌套其他结构体类型的变量

  

           不可以嵌套自己这个类型的变量


           struct Date{


               int month;

               int year;

               int day;


           };


           struct Student {


               char *name;

               int age;

               float score;

               struct Student stu; //错误的


           }

        2)可以嵌套自己类型的指针


#include <stdio.h>

//定义了一个时间的结构体

struct Time{

   

    int hour;

    int min;

    int sec;

   

};


//定义一个Date的结构体

struct Date{

   

    int year;

    int month;

    int day;

    //嵌套Time的结构体

    struct Time time;

   

};


//定义了一个学生的结构体

struct Student {

   

    char *name;

    int age;

    float score;

    struct Date birthday;

    //struct Student stu; //错误的

    //struct Student *stu; //正确的

   

};


int main(int argc, const char * argv[]) {

   


    //1、嵌套的结构体如何进行初始化

    struct Student stu1={"张三丰",28,59.99f,{1200,2,14,{12,12,12}}};  //定义了一个结构体变量

   

    //2、嵌套的结构体如何进行访问

    printf("姓名:%s,年龄:%d(生日:%d-%02d-%02d),成绩:%.2f\n",stu1.name,stu1.age,stu1.birthday.year,stu1.birthday.month,stu1.birthday.day,stu1.score);

   

    //访问时间

     printf("姓名:%s,年龄:%d(生日:%d-%02d-%02d %02d:%02d:%02d),成绩:%.2f\n",stu1.name,stu1.age,stu1.birthday.year,stu1.birthday.month,stu1.birthday.day,stu1.birthday.time.hour,stu1.birthday.time.min,stu1.birthday.time.sec,stu1.score);

   

   

    //3、结构体嵌套自身的指针

    struct Person {

   

        char *name;

        int age;

        //嵌套自己类型的指针

        struct Person *child;

   

    };

   

    //结构体嵌套自身指针的,初始化

    //定义kim

    struct Person kim={"kim",8,NULL};

   

    //struct Person *child = &kim;

    struct Person p1={"林志颖",38,&kim};

   

    //结构体嵌套自身指针的,访问

    printf("%s 的儿子是:%s,儿子的年龄:%d\n",p1.name,p1.child->name,p1.child->age);

   

    return 0;

}

6.结构体变量及成员作为函数参数

成员值做函数的参数:结构体成员属性作为函数的参数就是值传递(成员变量是数组除外)

结构体变量名作为函数的参数:

在ANSI C标准中允许用结构变量作函数参数进行整体传送。但是这种传送要将全部成员逐个传送,特别是成员为数组时将会使传送的时间和空间开销很大,严重降低了程序的效率。因此最好的办法就是使用指针,即用指针变量作函数参数进行传送。这是由实参传向形参的只是地址,从而减少了空间和时间的开销。

#include <stdio.h>

struct Car{

  

    int lunzi;

    int speed;


};


void xiuche(int n){


    n = 2;


}


//用结构体变量作为函数的参数

void xiuche1(struct Car c1){

   

    c1.lunzi = 2;

   

}


int main(int argc, const char * argv[]) {

   

    //定义一个结构体变量

    struct Car car1={4,200};

    //car1.lunzi 结构体变量成员值     4

    //1、用结构体变量的成员值作为函数的参数,实质是值传递

    xiuche(car1.lunzi);

   

    //2、用结构体变量作为函数的参数

    //实质上还是值传递

    xiuche1(car1);

   

    printf("%d\n",car1.lunzi);   //4

   

    return 0;

}

7.结构指针作为函数的参数

#include <stdio.h>

struct Car{

   

    int lunzi;

    int speed;

   

};


/**

*  结构体指针作为函数的参数

*

* @param c1 是一个结构体指针

*/

void xiuche2(struct Car *c1){


    c1->lunzi = 2;


}


int main(int argc, const char * argv[]) {

   

    //定义一个结构体变量

    struct Car car1={4,200};

   

    //注意:用结构体变量的地址传递给函数

    //     也可以理解为用结构体指针作为函数的参数

   

    //     实质:是地址传递

    xiuche2(&car1);

   

    printf("%d\n",car1.lunzi);   //2


    return 0;

}


作者:   张恒宇    时间: 2015-7-11 23:18
过来学习一下。。。呵呵哒
作者: dlamgg    时间: 2015-7-12 09:55
赞~~~~~~~~~~
作者: q387844322    时间: 2015-7-12 10:04
整理的很仔细
作者: 杨远鹏    时间: 2015-7-12 10:12
来看看,可以学到东西哦
作者: huangsailin    时间: 2015-7-12 10:13
学习了!谢谢!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2