C Abstract——Struct 结构体

原创 2015年07月08日 18:48:47

最近在研究Linux内核模块编程,遇到最多的就是结构,屡屡碰到一些生疏的用法如位域,成员初始化,于是便想着回顾一下。


结构体是什么?结构体是一系列变量的组合,就像C++中的类,结构体的在声明时不会分配内存空间,故而在使用时需要定义结构体变量。从本质上来说,结构体变量就是一片内存空间,但是我们对这篇内存中的存放内容进行了限定。


到这就会出现两个基本问题,一是结构体变量如何定义;一是结构体变量分配的空间是多大。基于这两个问题给出如下程序进行说明:

#include <stdio.h>

struct student{
    char name[15];
    int age;
};

struct student student_a;

typedef struct student stu;
stu student_b;

int main(int argc, char* argv[])
{
    printf("struct student size %d.\n", sizeof(struct student));
    printf("student_a size %d.\n", sizeof(student_a));
    printf("student_b size %d.\n", sizeof(student_b));
    return 0;      
}

由上述程序可以看出结构体定义与变量定义差别不大,需要注意的是变量的类型为 struct 类型名 ,struct不可忽略。然而为方便起见,可以使用typedef来重新定义一个结构体类型名。至于结构体所占的空间,存在一个内存对齐,即是与最长变量对齐,如果最长变量超过计算机的字长则已计算机字长为对齐单位,上述输出结果为20。


需要注意的是结构体中位域的概念,位域的实现是以bit为最小单位来存储变量,在定义时在变量名后加:num,num为变量需要的比特数,在分配时遵循一个变量不跨越多个不完整字节,且变量类型为无符号型或者整型,宽度为0的位域会强制讲下一个位域分配新的字节中,下例给出的结构体占两个字节:

struct test{
    unsigned char a:3;
    unsigned char b:4;
    unsigned char c:2;
};


接下来就是结构体的初始化,结构体的初始化方式有很多,常见的几种方式如下:

1.花括弧内用逗号隔开直接初始化;

2.花括号内成员名前加上成员运算符"."赋值;

3.对变量名.成员名逐个赋值;

注:凡是进行初始化而又未进行复制的成员默认会初始化为0(数值为0,字符串为'\0',指针为NULL)。


似乎也没什么可讲的,后面有相关疑问再补充!

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

从C到C++——结构体(struct)的涅槃

从C到C++,结构体(struct)涅槃重生,那么,C语言的结构体和C++结构体有什么不同呢,下面是一个测试程序,程序中大量的注释就算作本文的讲解吧!  /*- ==================...

opaque struct——c/c++如何隐藏内部结构体的定义?

学习过VLC的童鞋都会看得类似这样的代码: /** This structure is opaque. It represents a libvlc instance */ typedef struc...

C/C++中结构体(struct)知识点强化

  • 2009年10月12日 20:38
  • 16KB
  • 下载

struct2json -- C结构体与 JSON 快速互转库V1.0发布

struct2json 是一个开源的C结构体与 JSON 快速互转库,它可以快速实现 结构体对象 与 JSON 对象 之间序列化及反序列化要求。快速、简洁的 API 设计,大大降低直接使用 JSON ...

c/c++中使用sizeof计算结构体struct和类class的长度(字节)

前言 在默认情况下,为了方便对结构体内元素的访问和管理,当结构体内的元素长度都小于处理器的位数的时候,便以结构体内最长的数据元素为对齐单位,也就是说,结构体的长度一定是最长的数据元素的整数倍。如果结构...
  • hsd2012
  • hsd2012
  • 2016年03月24日 09:44
  • 2342

(C/C++)struct结构体

对程序员的经验进行评估可以通过看其对struct结构体的使用情况。 会不会用struct,怎样使用struct,是区别一个开发人员是否具备丰富开发经历的标志。 在嵌入式系统的C/C++代码编程中,...

C Primer Plus 结构体 struct 详解 常见用法

好好学习天天向上。

c/c++中结构体(struct)知识点强化,链表的学习

 结构体可以看做是一种自定义的数据类型,它还有一个很重要的特性,就是结构体可以相互嵌套使用,但也是有条件的,结构体可以包含结构体指针,但绝对不能在结构体中包含结构体变量。 struct test { ...
  • hy_67
  • hy_67
  • 2011年03月10日 13:53
  • 163

关于C中struct结构体的动态malloc和memcpy的指针操作

今天碰到一个问题,先贴代码:typedef struct Gifheader { char Signature[3]; char Version[3]; gifhea...
  • dgj8300
  • dgj8300
  • 2016年04月17日 01:17
  • 1917

C中结构体struct的用法

C语言中结构体变量和结构体类型的定义   在上课过程中发现,我们班的同学由于C语言的知识不是很扎实,对于结构体的变量定义以及结构体的类型定义理解不是很清楚,自己在课堂讲解时强调的也不透彻,故在此详...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C Abstract——Struct 结构体
举报原因:
原因补充:

(最多只允许输入30个字)