结构体专题

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. python之路——6

    王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594 复习 增dic['age'] = 21 dic.setfault()删popcleardel popitem ...

  2. java打印实心10*10正方形, 空心10*10正方形

    public class PrintSquare { public static void main(String[] args) { printSolidSquare(10); System.out ...

  3. USACO 2008 Running(贝茜的晨练)

    [题解] 动态规划,dp[i][j]表示第i分钟疲劳度为j的最长距离. [代码] #include <iostream> #include <cstdlib> #include ...

  4. jQuery+html+css-自己写的分页

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. requests模块学习

    - 基于如下5点展开requests模块的学习 什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在 ...

  6. .net百度编辑器的使用

    1.前端引用 <%@ Page ValidateRequest="false" Language="C#" AutoEventWireup="t ...

  7. 类似openDialog的弹窗

    html <modal title="这里是标题" hidden="{{modalHidden}}" bindconfirm="modalCon ...

  8. Ubuntu下RabbitMQ安装

    由于RabbitMQ需要erlang语言的支持,在安装RabbitMQ之前需要安装erlang,执行命令: sudo apt-get install erlang-nox 安装RabbitMQ命令: ...

  9. 零基础学习python_魔法方法(41-48课)(迭代器)

    接下来这个为啥要叫魔法方法呢,额,这个嘛我是跟小甲鱼的视频取的名字一样的,因为会讲比较多杂的东西,有... 魔法方法详细阅读地址:http://bbs.fishc.com/thread-48793-1 ...

  10. SVG 学习<五> SVG动画

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...