结构体

作者: Coder007 | 来源:发表于2016-11-18 11:13 被阅读1次
结构体定义格式
/*
struct 结构体类型名称
{
    属性;
};
*/
struct Person
{
    char *name;
    int age;
    double height;
};

定义结构体变量
// 定义变量
struct Person p;
结构体初始化
// 定义的同时初始化
struct Person p = {"yaof", 20, 180.0};

// 先定义再初始化(逐个初始化)
struct Person p;
p.name = "yaof";
p.age = 20;
p.height = 180.0;

// 先定义再初始化(一次性初始化)
// 特别注意:需要进行强制转换,需要明确的告诉系统这个是结构体
struct Person p;
p = (struct Person){"yaof", 20, 180.0};

// 指定将数据赋值给指定的属性
struct Person p = {.age = 20, .name = "yaof", .height = 180.0};
结构体内存分析
  • 定义结构体类型并不会分配存储空间

  • 只有定义结构体变量才会真正的分配存储空间

  • 结构体名称并不是结构体地址

  • 结构体的地址就是他第0个属性的地址

  • 结构体是如何分配存储空间的

  • 结构体会先找到所有属性中占用内存空间最大的那个属性,然后按照该属性的倍数来分配存储空间

  • 找到结构体中占用存储空间最大的,比如占用m个字节

  • 会从第0个属性开始分配存储,第一个属性存储进去

  • 如果还有剩余空间,如果能存下第1个属性,那么就将第一个属性存储进去

  • 如果存不下,就会重新分配m个字节,并且会将当前属性直接存储到新分配的空间中,前一个剩下的存储空间就不要了

  • 使用属性中占用存储空间最大的属性的字节来分配存储空间是为了提高计算机运算速度

定义结构体变量的方式
// 先定义结构体类型,再定义结构体变量
struct Person
{
    int age;
    char *name;
};
struct Person p;

// 定义结构体类型的同时定义结构体变量
struct Person
{
    int age;
    char *name;
} p;

// 定义结构体类型的同时定义结构体变量,并且省略结构体名称
// 弊端:没有名称,不能重复使用
// 优点:如果结构体只使用一次,可以使用该方法
struct
{
    int age;
    char *name
}p;
指向结构体的指针
// 定义一个指向结构体的指针
struct Person *sip;
sip = &p;
// 注意:如果想使用*sip代替p访问结构体属性的时候,需要加上括号(*sip)
// 因为运算符优先级:.的优先级比*高
(*sip).age = 30;

// 还有另一种访问属性的方式
// 结构体指针变量名称 -> 属性
sip -> age = 40;
sip -> name = "yaofc";
结构体数组
struct Person
{
    int age;
    char *name;
};
struct Person pps[2] = {
    {20, "zhao"},
    {30, "qing"}
};
pps[0].age = 30;
pps[1].age = 40;
值传递
// 结构体传值是值传递
struct Person
{
    int age;
    char *name;
};
struct Person p1 = {20, "zhao"};
// 这样传值是值传递,修改p2属性值,与p1无关
struct Person p2 = p1;

相关文章

  • 结构体

    [toc] 结构体的定义方式 先定义结构体类型,再定义结构体变量 定义结构体类型的同时定义结构体变量 定义结构体类...

  • 【C语言笔记】<十九>结构体

    结构体的基本概念 结构体初始化 结构体的内存存储细节 结构体定义的方式 结构体类型的作用域 指向结构体的指针 结构...

  • C结构体和链表

    一,结构体变量定义及初始化 二,无名结构体 备注:无名结构体很少使用 三,宏定义结构体 四,结构体嵌套 五,结构体...

  • 结构体

    结构体定义* 结构体中的格式:* struch 结构体名* {* 结构体成员变量* }* 结构体中的特点* 1.结...

  • 结构体数组的定义

    结构体数组的定义 1、先定义结构体类型,再定义结构体数组 2、定义结构体类型的同时定义结构体数组 3、省略结构体类...

  • C#结构体,析构方法,跨程序访问

    结构体 结构体定义 结构体的语法格式: struct + 结构体名 { 结构体成员变量(相当于类中的字段) } 结...

  • 结构体

    结构体有名定义 无名定义 结构体嵌套定义 结构体内存对齐 结构体成员初始化 结构体变量引用 结构体的有名定义:直白...

  • 菜鸡学Swift3.0 13.结构体

    结构体 struct 是值类型 1.定义结构体 struct 结构体类型 { var 结构体属性:类型 ...} ...

  • 结构体

    结构体初识 结构体指针 结构体的匿名字段 结构体嵌套 Go语言中的OOP

  • C语言 第九章 结构体

    [TOC] 第九章结构体 结构体的定义 结构体定义2 指针表示结构体

网友评论

      本文标题:结构体

      本文链接:https://www.haomeiwen.com/subject/rxwjpttx.html