C语言学习之结构体等

结 构 体
 

1.结构体的定义
  struct 结构体名
  {
   数据类型1 成员变量1;
   数据类型2 成员变量2;
   数据类型3 成员变量3;
   ...
   数据类型n 成员变量n;
  };
 2.结构体的初始化
  1.有名结构体初始化
   1.全部初始化
   struct student
   {
    char name[20];
    char sex;
    int num;
    int score;
   };
   struct student a = {"zhangsan", 'm', 1001, 60};
   
   2.部分初始化
   struct student a = {
         .name = "zhangsan",
         .num = 1001,
        };
   3.定义结构体时初始化定义变量
   struct student
   {
    char name[20];
    char sex;
    int num;
    int socre;
   }a = {"zhangsan", 'm', 1000, 100};

  2.无名结构体初始化
   1.全部初始化
   struct
   {
    char name[20];
    char sex;
    int num;
    int score;
   }a = {"zhangsan", 'm', 1000, 100};

   2.部分初始化
   struct
   {
    char name[20];
    char sex;
    int num;
    int score;
   }a = {
     .name = "zhangsan",
     .sex = 'm',
     };
 
 3.结构体的访问
  1.通过结构体变量名访问
   a.name
   a.sex
   a.num
   a.score
  2.通过结构体指针访问
   ps->name
   ps->sex
   ps->num
   ps->score

 4.结构体成员变量的操作
  

  从终端接收一个学生的姓名、性别、学号、成绩
  存放在一个结构体当中,并且在终端上打印除输
  入的所有信息

结构体
 1.结构体在内存中的存储
  1.内存对齐
   1.成员变量只能存放在地址为自身
   类型基本长度整数倍的内存地址单
   元当中
   2.结构体类型的长度必须是成员变
   量中最大基本类型的整数倍
  2.内存中有3中对齐方式
   1.字节对齐
   2.半字对齐
   3.字对齐
共用体
 1.概念
 共用体内部的成员变量共同使用同一块内存空间
 共用体中保存的数据是上次赋值后的成员变量值

 2.存储
 内存大小端:
  内存低地址存放低数据位叫做小端
  内存低地址存放高数据位叫做大端


枚举
 enum weekday
 { 
  sunday,    //0
  monday,    //1
  tuesday,   //2
  wednesday,   //3
  thusday,   //4
  friday,    //5
  saterday,   //6
 };

 enum weekday day = 0;


指针高级
 1.一级指针:指向一个普通变量的指针,保存的是变量
      的内存地址编号
 2.二级指针:指向一个指针变量的指针,保存的是指针
      变量的内存地址编号

 3.const 只读类型
  1. const int *p;
  2. int const *p;

  3. int * const p;
  4. const int * const p;
  5. int const * const p;

  1. 1和2属于同一种形式,它们将*p修饰成为只读
      类型没有办法通过指针变量p修改对应内存地址
   单元中的值,但是可以通过直接使用变量名修改
   对应内存单元中的值

  2. 3中const修饰指针变量p,此时p必须初始化,否
      则将无法改变指针变量p中的值,但是可以利用
   指针p改变其对应内存单元中的值

  3.  4和5属于同一种形式,他们将*p和p修饰成只读
   类型,既没有办法修改p中的值,也没有办法修
   改指针变量p对应的内存单元的值,注意定义该
   类型指针变量p时,必须初始化
 
 4.void指针
  char *p = &ch;
  int *q = NULL;

  q = p;

  不仅能把地址赋值给void型指针,并且还能把指针
  的类型赋值给void型指针,所以void型指针既可以
  变成char*指针也可以变成int*指针,还可以变成其
  余类型的指针

 5.数组指针和指针数组
  1.数组指针是一个指针,该指针指向一个数组
    数组指针占4个字节内存空间,空间中保存的是
    一个指向数组的地址
  
    int (*p)[5];
    定义了一个数组指针p,p变量占4个字节存储空间,
    但是该指针指向一个5个元素的整型数组

  2.指针数组是一个数组,该数组中保存的元素都为
    指针类型
    指针数组的大小由数组元素的个数来决定,每个
    元素中保存的值都为一个地址
  
    int *p[5];
    定义了一个指针数组,数组名为p,指针数组占
    20个自己的连续空间,并且每个元素都保存了
    指向一个整型变量的指针

 6.数组和指针的关系
  1.一维数组和指针的关系
   一维数组的数组名就是指向数组第一个元素的
   指针
   int a[5];
   int *p = a;

   a[n] = *(a+n) = *(p+n) = p[n]

  2.二位数组和指针的关系
   行指针
    二维数组中,指向每一行的一个指针叫做
    行指针

   a[0]是指向第一行元素的一个列指针
   int a[3][4];
   int *p = a[0];

   第n行第m个元素
   a[n-1][m-1] = *(a[n-1]+m-1) = *(p+(n-1)*总列数+m-1)
 
   二位数组数组名是指向二位数组的一个行指针
   该行指针指向第一行的列指针,a+1则指向第二
   行的列指针

   使用a访问第n行第m个元素
   a[n-1][m-1] = *(*(a+n-1)+m-1)

   行指针和数组指针的关系
   行指针就是指向一个数组的数组指针,只不过
   该数组就是二位数组的一行

   int a[3][4];
   int (*p)[4] = a;


   二维数组的数组名是指向第一行元素数组的一
   个数组指针

   int a[3][4];
   int (*p)[4] = a;
   int *p = a[0];
   int *p = *a;
   int *p = &a[0][0];
   int (*p)[4] = &a[0];

 

利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值