结构体类型

C语言中还有一种类型叫做结构体类型,它是可以保存不同类型数据并且可以把这些不同类型的数据当做一个整体来管理的类型

1).结构体的定义

语法:

struct 结构体名{

成员列表;

};        注意:这里是有 分号 的!!

成员列表里面写成员。成员的语法格式为:

类型  成员名;  // 每个成员之间用分号隔开

例:

struct girlFriend{

char name[50]; //姓名

int age;         //年龄

char gender[4];//性别

int height;     //身高

int weight;     //体重

char bodyCai;  //身材

};

注意:此时写了多个不用类型的成员变量,但是并没有存储数据,只是定义了一个新的数据类型————结构体类型

2).结构体类型的变量的声明

结构体的声明语法:

struct 结构体名 变量名;

注意:struct和结构体名合起来才叫一个类型,就比如说int *一样由int和*合起来才算一个指针类型

例:

struct girlFriend gf;  // gf就是变量名,struct girlFriend是类型

3).结构体的初始化和赋值

语法1:

结构体类型 结构体变量名 = { 成员数据1,成员数据2,....成员数据n };

例:struct girlFriend fj = { "小红",16,"女",155,45,'O' };

语法2:

结构体类型  结构体变量名 =  { .成员名 = 数据1,.成员名2 = 数据2.....  };

例:struct girlFriend fr = { .gender = "女",.height=155,.name="小红",.bodyCai='S',.weight = 80,.age=67  };

语法3:结构体变量,也允许先声明,后一次性赋值

例:struct girlFriend fj;

fj = (struct girlFriend){ "小红",16,"女",155,45,'O' };

4).结构体的取值

语法: 结构体变量名.成员名;

例: fj.age;

fj.name;

注意:没有任何的格式化控制符能帮你一下子输出结构体变量的值

5).结构体其他的一些细节

1.结构体类型可以定义在函数内,也可以定在函数外

如果定义在函数外,那么从它定义的位置开始,直接到文件结束,都可以使用到这个类型

如果定义在函数内,那么它的作用范围只能从它定义的位置开始,直到它所在的代码块结束

2.可以在定义结构体类型的时候,就声明这个结构体类型的变量

例:

struct student{

char *name;

int age;

int gender;

}s2;  //这个s2就是这个结构体的变量

如果要同时声明多个变量,那么以,隔开

例:

struct student{

char *name;

int age;

int gender;

}s2,s3,s4;

3.可以定义一个匿名的结构体,一般都会在定义匿名结构体的时候就声明它的变量,否则没有任何意义

例:

struct{

int year;

int month;

int day;

}day1;  //day1就是这个匿名结构体的变量

6).typedef与结构体搭配使用

声明结构体变量的语法:

struct 结构体名 变量名;

类型,有2个单词

int num;

char ch;

float f;

struct student s1;

用typedef就可以用一个关键字来声明结构体变量

语法:

typedef struct{

成员列表;

}类型名;

例:

typedef struct {

char *name;

int age;

int gender;

}Student; //因为前面加了typedef,所以此处的Student不是变量,而是类型

C语言之结构体的更多相关文章

  1. C语言中结构体赋值问题的讨论

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  2. C语言的结构体和C++结构体的区别

    关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的 ...

  3. 01.C语言关于结构体的学习笔记

    我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ...

  4. C语言中结构体对齐问题

    C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...

  5. 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式

    逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...

  6. C语言中结构体赋值问题的讨论(转载)

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  7. go语言学习-结构体

    结构体 go语言中的结构体,是一种复合类型,有一组属性构成,这些属性被称为字段.结构体也是值类型,可以使用new来创建. 定义: type name struct { field1 type1 fie ...

  8. 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct

    https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...

  9. [日常] Go语言圣经--结构体,JSON习题

    Go语言圣经-结构体 1.结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体 2.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...

  10. Go语言中结构体的使用-第2部分OOP

    1 概述 结构体的基本语法请参见:Go语言中结构体的使用-第1部分结构体.结构体除了是一个复合数据之外,还用来做面向对象编程.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. ...

随机推荐

  1. elasticsearch集群搭建实例

    elasticsearch集群搭建实例 下个月又开始搞搜索了,几个月没动这块还好没有落下. 晚上在自己虚拟机上搭建了一个简易搜索集群,分享一下. 操作系统环境: Red Hat 4.8.2-16 el ...

  2. Ubuntu12.10无法安装openssh-server[已解决]

    因为要在Ubuntu下搞些东西,家里的台式有Deepin2013,但是发现有很多依赖的问题,实在不想解决,就到win7下用VBox安装了Ubuntu.打算使用SourceCRT连接虚拟机,但是在安装在 ...

  3. QT最简单的程序执行过程分析(内含C++基础知识)

    打开QT Creator,新建一个“应用程序-Qt Widgets Application”项目: 输入名称scdc之后点击下一步. 在“构建套件”这个页面中直接点出下一步,然后再输入自己的类名Dat ...

  4. 【SSRS】入门篇(四) -- 向报表添加数据

    原文:[SSRS]入门篇(四) -- 向报表添加数据 定义好数据集后 [SSRS]入门篇(三) -- 为报表定义数据集 ,就可以开始设计报表了,将要显示在报表的字段.文本框.图像和其他项从工具箱拖放到 ...

  5. android项目--上下文菜单

    一般说到上下文菜单基本上都是长按事件,在一个控件上长按,就会弹出一个菜单. 1.创建上下文菜单: //覆盖方法,创建上下文菜单 @Override public void onCreateContex ...

  6. 真与假与c#,java中的不同之处

    /************真与假************/ /*C语言中:真(非0).假(0) * Java.C#中:真(true).假(false) * JavaScript中:真(非0.true. ...

  7. Javascript多线程引擎(一)

    Javascript多线程引擎(一) Javascript 天生是单线程的语言, 不支持synchronized等线程操作, 但是这便不妨碍Javascript作为web语言中最具有魅力语言之一. 虽 ...

  8. Asp.Net Web Api 接口

    如何让你的 Asp.Net Web Api 接口,拥抱支持跨域访问.   由于 web api 项目通常是被做成了一个独立站点,来提供数据,在做web api 项目的时候,不免前端会遇到跨域访问接口的 ...

  9. Effective C++(19) 设计class犹如设计type

    问题聚焦:     这一节不涉及代码,但是我们需要明确的一点是,思想比代码要重要得多.     设计优秀的classes是一项艰巨的工作,就像设计好的types一样.     我们应该带着和“语言设计 ...

  10. linux下的中文编码问题

    很多linux的初学者都会碰到这样一个问题:把windows下的文档拷到linux系统,会出现乱码!其实这涉及到中文编码的问题.linux系统默认的是统一码(utf8).而如果你的文件是big5,显然 ...