结构体专题

01、结构体类型定义及结构体变量定义

    char c1,char c2, char name[62]; int age

    char name[62]; int age,char c1,char c2

    结构体变量的引用 :.

    结构体变量的指针 :->

 

02、结构体做函数参数

    结构体赋值编译器行为研究

    结构体变量做函数参数 PK 结构体指针做函数参数

    结构体做函数参数(//结构体赋值和实参形参赋值行为研究)

    内存四区调用图画法

 

//从键盘获取数据,给结构体变量初始化,并排序,打印结构体

    stack上分配结构数组和heap上分配结构体数组

 

03、结构体开发的常见模型及典型错误用法

    结构体嵌套一级指针

    结构体嵌套二级指针

04、结构体中的深拷贝/浅拷贝

    问题抛出

    解决方法

结构体类型定义及变量定义

/*

结构体类型定义及结构体变量定义;结构体是一种构造数据类型;用途:把不同类型的数据组合成一个整体-------自定义数据类型;结构体类型定义。

*/

//声明一个结构体类型

struct _Teacher

{

    char    name[32];

    char    tile[32];

    int    age;

    char    addr[128];

};

 

//定义结构体变量的方法

/*

1)定义类型 用类型定义变量

2)定义类型的同时,定义变量;

3)直接定义结构体变量;

*/

 

struct _Student

{

    char    name[32];

    char    tile[32];

    int    age;

    char    addr[128];

}s1, s2; //定义类型的同时,定义变量;

 

struct

{

    char    name[32];

    char    tile[32];

    int    age;

    char    addr[128];

}s3,s4; //直接定义结构体变量,匿名结构体

 

//初始化结构体变量的几种方法

//1)

struct _Teacher t4 = {"name2", "tile2", 2, "addr2"};

//2)

struct Dog1

{

    char    name[32];

    char    tile[32];

    int    age;

    char    addr[128];

}d5 = {"dog", "gongzhu", 1, "ddd"};

 

//3)

struct

{

    char    name[32];

    char    tile[32];

    int    age;

    char    addr[128];

}d6 = {"dog", "gongzhu", 1, "ddd"};

//结构体变量的引用

int
main()

{

    //struct _Teacher t1, t2;

    //定义同时初始化

    {

        struct _Teacher t3 = {"name2", "tile2", 2, "addr2"};

        printf("%s\n", t3.name);

        printf("%s\n", t3.tile);

    }

 

    //用指针法和变量法分别操作结构体

    {

        struct _Teacher t4;

        struct _Teacher *pTeacher = NULL;

        pTeacher = &t4;

 

        strcpy(t4.name, "wangbaoming");

 

        strcpy(pTeacher->addr, "ddddd");

        

        printf("t4.name:%s\n", t4.name);

    }

 

    printf("hello....\n");

    getchar();

    return
0;

}

 

结构体做函数参数及结构体数组

//测试两个结构体变量之间可以copy数据吗?

//t2 = t1;

//测试实参传给形参,编译器的行为

//声明一个结构体类型

struct _MyTeacher

{

    char    name[32];

    char    tile[32];

    int    age;

    char    addr[128];

};

 

void
printfMyteach01(struct _MyTeacher t)

{

    printf("\nt.name:%s", t.name);

}

 

void
printfMyteach02(struct _MyTeacher *t)

{

    printf("\nt->name:%s", t->name);

}

//结构体赋值和实参形参赋值行为研究

int
main1()

{

    struct _MyTeacher t1, t2;

    memset(&t1, 0, sizeof(t1));

 

    strcpy(t1.name, "name");

    strcpy(t1.addr, "addr");

    strcpy(t1.tile, "addr");

    t1.age = 1;

 

    //测试两个结构体变量之间可以copy数据吗?

    //t2 = t1;

    //测试实参传给形参,编译器的行为

    //是可以的

    printfMyteach01(t1);

 

    printfMyteach02(&t1);

 

    getchar();

    return
0;

}

 

//定义结构体数组

int
main()

{

    int i = 0;

    struct _MyTeacher teaArray[3];

    struct _MyTeacher *tmp = NULL;

    for (i=0; i<3; i++)

    {

        strcpy(teaArray[i].name, "aaaaa");

        //printf("%s", teaArray[i].name);

        tmp = &teaArray[i];

        printf("%s", tmp->name);

    }

    getchar();

    return
0;

}

例子

从键盘接受数据。。。。并排序

int
printfArray(struct _MyTeacher *teaArray, int count)

{

    int i = 0;

    //打印

    for (i=0; i<count; i++)

    {

        printf("\n教师名字:");

        printf("%s", teaArray[i].name);

        printf("\n教师年龄:");

        printf("%d", teaArray[i].age);

    }

 

}

int
main23()

{

    int i = 0, j = 0;

    struct _MyTeacher teaArray[3];

 

    struct _MyTeacher tmp;

 

    for (i=0; i<3; i++)

    {

        printf("\n请键入教师名字:");

        scanf("%s", teaArray[i].name);

        printf("\n请键入教师年龄:");

        scanf("%d", &teaArray[i].age);

    }

 

    for (i=0; i<3; i++)

    {

        for (j=i+1; j<3; j++)

        {

            if (teaArray[i].age >teaArray[j].age)

            {

                tmp = teaArray[i];

                teaArray[i] = teaArray[j];

                teaArray[j] = tmp;

            }

        }

    }

 

    //打印

    for (i=0; i<3; i++)

    {

        printf("\n教师名字:");

        printf("%s", teaArray[i].name);

        printf("\n教师年龄:");

        printf("%d", teaArray[i].age);

    }

 

    printf("ddddd\n");

    printfArray(teaArray, 3);

 

    system("pause");

 

}

 

结构体在开发中的应用

//测试输入

//测试打印

//测试malloc

//测试typdef用法

//定义结构体数组

 

struct _Student

{

    char    name[32];

    char    tile[32];

};

 

//声明一个结构体类型

struct _itTeacher

{

    char    name[32];

    char    tile[32];

    int        age;

    char    addr[128];

};

 

struct _itAdvTeacher

{

    char    *name;

    char    *tile;

    int        age;

    char    *addr;

    char    *p1;

    char    **p2;

};

 

 

//测试输入

//测试打印

//测试malloc

//测试typdef用法

 

//定义结构体数组

int
main()

{

    int i = 0;

    struct _itTeacher teaArray[3];

    struct _itTeacher *tmp = NULL;

    for (i=0; i<3; i++)

    {

        strcpy(teaArray[i].name, "aaaaa");

        //printf("%s", teaArray[i].name);

        tmp = &teaArray[i];

        printf("%s", tmp->name);

    }

    getchar();

    return
0;

}

 

//内存四字节对齐

//结构体实参传给形参,也是一个值copy,相当于t1 = t2;

//两个结构体变量之间确实是可以copy,这个是编译器的行为


 

C语言复习:结构体的更多相关文章

  1. C语言中结构体赋值问题的讨论

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  2. C语言的结构体和C++结构体的区别

    关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的 ...

  3. 01.C语言关于结构体的学习笔记

    我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ...

  4. C语言中结构体对齐问题

    C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...

  5. 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式

    逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...

  6. C语言中结构体赋值问题的讨论(转载)

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  7. go语言学习-结构体

    结构体 go语言中的结构体,是一种复合类型,有一组属性构成,这些属性被称为字段.结构体也是值类型,可以使用new来创建. 定义: type name struct { field1 type1 fie ...

  8. 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct

    https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...

  9. [日常] Go语言圣经--结构体,JSON习题

    Go语言圣经-结构体 1.结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体 2.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...

随机推荐

  1. [UE4]Cast to 转换成纯函数

    这样就变成不需要执行线了,可以直接得到转换结果

  2. [UE4]end快捷键,落地

    actor的根节点需要是实体模型才可以,end快捷键着地是让actor的根节点着地.

  3. 第二章:安装zabbix过程

    2.2 安装zabbix过程 2.2.1 安装方式选择 编译安装 (服务较多,环境复杂) yum安装(干净环境) 使用yum 需要镜像yum源 http://www.cnblogs.com/clsn/ ...

  4. C#对windows的IP网络测试(ping ip)

    private string CmdPing(string strIp) { Process p = new Process(); //设定程序名 p.StartInfo.FileName = &qu ...

  5. MySQL查询表的所有列名,用逗号拼接

    问题场景 在MySQL中,需要以逗号拼接一个表的所有字段 sql语句 SELECT GROUP_CONCAT(COLUMN_NAME SEPARATOR ",") FROM inf ...

  6. Java——ikanalyzer分词·只用自定义词库

    需要包:IKAnalyzer2012_FF_hf1.jarlucene-core-5.5.4.jar需要文件: IKAnalyzer.cfg.xmlext.dicstopword.dic 整理好的下载 ...

  7. JavaScript简单的实例应用

    1.显示当前时间: <!doctype> <html> <head> <meta charset='utf-8'> <script type='t ...

  8. python初探 socket

    1.什么是socket? Socket中文译作:套接字,但是大家一般约定俗称的都用:socket.我想在解释socket是什么之前,先说它是用来干嘛的:socket是来建立‘通信’的基础,建立连接,传 ...

  9. 把自己的代码发布到npm(npm publish)

    写了代码如何发布到npm包? 示例 demo1 demo2 1.注册npm账号 在npm官网注册https://www.npmjs.com/注意邮箱要验证,会发送验证链接到你的注册邮箱,没有验证的话是 ...

  10. 可恶的 0xc0000005异常

    昨天快下班的时候自己写的代码突然跑出了这个异常,,搞的我特别的无语,因为昨天女朋友要过来了,给我出现了这么一个bug,心里很不爽,果断低下班了,另外一个原因就是公司其他人都跑了,每次基本都是我一个人最 ...