C结构体

一、结构体的的概念及定义

1、概念:之前学过数组内部是相同类型的元素,而结构体就是内部不同数据类型的一个整体

2、结构体的定义

struct student
{
      变量; // 称为结构体变量或属性
}
//根据结构体类型student,定义结构体变量,变量名为s(此阶段分配存储空间)
struct student s={ };  // 赋值的时候只能在定义结构体的时候同时赋值


二、内存分析

1、对齐算法:结构体所占用内存空间的大小,一定是结构体中最大成员所占用存储空间的倍数。 

struct Student
{
  int age; // 4个字节
  char *name; // 8个字节
}stu;

结构体所占用的字节:16个字节(8的倍数); 

2、内存分配:定义结构体类型时不会分配内存空间,只有当赋值的时候才能分配存储空间。

三、注意点

1、定义结构体变量的三种方式:

1>从类型和变量进行考虑先定义类型(相当于int、double等),再定义变量

 struct student
 {
     int age; 
 };
     struct student stu;
2>定义类型的同时定义变量

struct student
{
     int age;
} stu;
3>定义类型的同时定义变量,但是省略类型名称

 struct
 {
     int age;
 } stu;
2、结构体类型的作用域

定义在函数内部:从定义那一行开始,到函数或代码块结束。(跟局部变量一样)

定义在函数外部:从定义那一行开始,到程序结尾。(跟全局变量一样)


四、复杂类型的结构体

1、结构体数组(结构体中定义结构体):

struct student stu[3] = {  { },{ },{ }  }  // 结构体数组中含有三个结构体

数组修改方式:

错误修改:stu[0]={ };

正确修改:stu[0].age=10;

2、指向结构体的指针

struct student  *p;

p=&stu;

 有三种方法访问结构体属性:

  方法1:stu.age;
  方法2:(*p).age;//代表指针访问结构体中的age属性  
  方法3: p->age;//代表指针访问结构体中的age属性 (最常用)

3、结构体嵌套

概念:在结构体中调用结构体。

struct names
{
   int ages;
   int years;
}name;
struct Student
{
    name *stuname; // 嵌套结构体name
    int banji;
}stu;

五、结构体的sizeof问题详解

  如题

#include <stdio.h>

struct stu
{
   char names[10];
   long num;
   char sex;
   int age;
   float score;
   char address[10];
};

void main()
{
   stu stu2;
   printf("%d  %d  %d  %d\n",sizeof(long),sizeof(char),sizeof(int),sizeof(float));
   printf("%d\n",sizeof(stu2));
}


运行结果:

4  1  4  4

40

过程详解:

结构体每个保存都是按照最长的定义类型来的。

字节对齐的细节和编译器实现相关,但一般而言,满足三个准则:

1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;

2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是最宽基本类型成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);

3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)


比如上面最长的是int和long 都是4个字节

见下示例图。

口口口口

口口口口

口口 char names[10]

口口口口 long num

口 char sex

口口口口 int age

口口口口 float score

口口口口 

口口口口

口口 char address[10]


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值