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)。


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

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

相关文章推荐

结构体Struct(c#)

C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员。   结构和类的区别:   1、结构是值类型,它在栈中分配空间;而类是引用类型,它在堆中分配空间,栈中保...

C# 结构体—struct

C#中结构类型struct和类类型class在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员。   结构和类的区别:   1、结构是值类型,它在栈中分配空间;而类是引用类型,它...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

C# 结构体 struct

C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员。  结构和类的区别:  1、结构是值类型,它在栈中分配空间;而类是引用类型,它在堆中分配空间,栈中保存的只是...
  • WuLex
  • WuLex
  • 2016-12-24 12:57
  • 179

C# 结构体 struct

C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员。   结构和类的区别:   1、结构是值类型,它在栈中分配空间;而类是引用类型,它在堆中分配空间...

C# 结构体 struct

C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员。   结构和类的区别:   1、结构是值类型,它在栈中分配空间;而类是引用类型,它在堆中分配空间...
  • ybhjx
  • ybhjx
  • 2016-04-18 13:18
  • 189

(C/C++)struct结构体

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

结构体struct

在网络协议、通信控制、嵌入式系统等我们需要传送的不是简单的字节流,而是包含了很多数据类型的一个整体。这时候,我们可以通过结构体来进行解决。 在结构体中,数据默认是共有的,可以进行直接的访问,而在类中...

结构体【struct】

结构体【struct】 一.结构体定义 概念:结构体是由一系列不同或相同基本类型数据组合而成的新的复合数据集合,从而使这些数据项组合起来反应一个信息。   意义:结构体的使用为处理复杂的数据结...

结构体struct

对代码不满足,是任何真正有天才的程序员的根本特征。#include /* run this program using the console pauser or add your own getc...

结构体struct

在网络协议、通信控制、嵌入式系统等我们需要传送的不是简单的字节流,而是包含了很多数据类型的一个整体。这时候,我们可以通过结构体来进行解决。 在结构体中,数据默认是共有的,可以进行直接的访问,而在...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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