C语言之结构体
结构体类型
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语言之结构体的更多相关文章
- C语言中结构体赋值问题的讨论
今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...
- C语言的结构体和C++结构体的区别
关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的 ...
- 01.C语言关于结构体的学习笔记
我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ...
- C语言中结构体对齐问题
C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...
- 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式
逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...
- C语言中结构体赋值问题的讨论(转载)
今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...
- go语言学习-结构体
结构体 go语言中的结构体,是一种复合类型,有一组属性构成,这些属性被称为字段.结构体也是值类型,可以使用new来创建. 定义: type name struct { field1 type1 fie ...
- 将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. ...
- [日常] Go语言圣经--结构体,JSON习题
Go语言圣经-结构体 1.结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体 2.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...
- Go语言中结构体的使用-第2部分OOP
1 概述 结构体的基本语法请参见:Go语言中结构体的使用-第1部分结构体.结构体除了是一个复合数据之外,还用来做面向对象编程.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. ...
随机推荐
- 为Pythonic论坛添加一个“专题”功能(续)
上篇博文<为Pythonic论坛添加一个“专题”功能>,在模板的层次上对发帖进行了限制.也就是根据用户是否拥有权限来决定是否显示发帖框. 但是自从这么“投机取巧”的写完模板后,整夜辗转反侧 ...
- Windows在结构objective C开发环境
对于近期打算iPhone.iPod touch和iPad开发一些应用程序,所以.需要开始学习Objective C(苹果推出的类似C语言的开发语言).因为苹果的自我封闭的产业链发展模式(从芯片.机器. ...
- VBS学习日记(一个) 开始了解
Vbs 一个 Windows 脚本,其代表 :Microsoft Visual Basic Script Editon.( 微软可视化BASIC 脚本版),VBS 是 Visual Basic 的的一 ...
- 11g R2RAC Dynamic remastering
In this post, I will demonstrate dynamic remastering of the resources in RAC . In RAC, every data bl ...
- 智能的API、云服务和SOA测试解决方案——Parasoft SOAtest
依赖Parasoft测试解决方案的机构,不仅有小企业,政府机构,还有世界500强集团.Parasoft公司推出的Parasoft SOAtest,提供了API.云服务和SOA最全面的测试解决方案.此次 ...
- 基于jQuery的上下无缝滚动应用(单行或多行)
工作中遇到的一个js代码,现在对.trigger('mouseleave'),仍一知半解... <script>$(function(){//单行应用var _wrap=$('ul.lin ...
- 了解mongoDB存储结构
mongoDB 深入浅出一 了解mongoDB存储结构 MongoDB 深入浅出 数据逻辑结构 1 mongoDB中的文档(document) 相当于 关系性数据库的一条一条的记录 2 colle ...
- ETHREAD APC
ETHREAD APC <寒江独钓>内核学习笔记(4) 继续学习windows 中和线程有关系的数据结构: ETHREAD.KTHREAD.TEB 1. 相关阅读材料 <window ...
- 关于ADB server didn't ACK * failed to start daemon *的问题
查看5037端口被谁占用了, 开始--运行--CMD 到命令提示符,输入 netstat -aon|findstr "5037" 输入 tasklist|findstr " ...
- Linux环境进程间通信(二): 信号(上)
linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...