C语言-06复杂数据类型-04 结构体
结构体的说明(构造类型)
数组:只能由多个相同类型的数据构成
结构体:可以由多个不同类型的数据构成 ,结构体的类型是不存在的,自己定义
int main()
{
// 1.定义结构体类型 定义类型的时候是没有分配内存的
struct Person
{ // 里面的3个变量,可以称为是结构体的成员或者属性
int age; // 年龄
double height; // 身高
char *name; // 姓名
}; //注意分号 // 1.定义结构体类型
struct Person p = {, 1.55, "jack"};
p.age = ;
p.name = "rose"; printf("age=%d, name=%s, height=%f\n", p.age, p.name, p.height); /* 错误写法
struct Person p2;
p2 = {30, 1.67, "jake"};
*/ struct Person p2 = {.height = 1.78, .name="jim", .age=};
//p2.age = 25; return ;
}
.定义结构体变量的3种方式
> 先定义类型,再定义变量(分开定义)
struct Student
{
int age;
};
struct Student stu; > 定义类型的同时定义变量
struct Student
{
int age;
} stu;
struct Student stu2; > 定义类型的同时定义变量(省略了类型名称)//无法重用
struct
{
int age;
} stu;
结构体数组
int main()
{
struct RankRecord
{
int no; // 序号 4
char *name; // 名称 8
int score; // 积分 4 };
/*
struct RankRecord r1 = {1, "jack", 5000};
struct RankRecord r2 = {2, "jim", 500};
struct RankRecord r3 = {3, "jake",300};
*/
struct RankRecord records[3] =
{
{1, "jack", 5000}, {2, "jim", 500}, {3, "jake",300}
};
for (int i = 0; i<3; i++)
{
printf("%d\t%s\t%d\n", records[i].no, records[i].name, records[i].score);
} return 0;
}
指向结构体的指针
#include <stdio.h> /*
1.指向结构体的指针的定义
struct Student *p; 2.利用指针访问结构体的成员
1> (*p).成员名称
2> p->成员名称 */ int main()
{
struct Student
{
int no;
int age;
};
// 结构体变量
struct Student stu = {, }; // 指针变量p将来指向struct Student类型的数据
struct Student *p; // 指针变量p指向了stu变量
p = &stu; p->age = ; // 第一种方式
printf("age=%d, no=%d\n", stu.age, stu.no); // 第二种方式
printf("age=%d, no=%d\n", (*p).age, (*p).no); // 第三种方式 是比较常用的
printf("age=%d, no=%d\n", p->age, p->no); return ;
}
结构体和函数
#include <stdio.h>
struct Student
{
int age;
int no;
}; // 如果结构体作为函数参数,只是将实参结构体所有成员的值对应地赋值给了形参结构体的所有成员
// 修改函数内部结构体的成员不会影响外面的实参结构体
void test(struct Student s)
{
s.age = ;
s.no = ;
} // 会影响外面的实参结构体
void test2(struct Student *p)
{
p->age = ;
p->no = ; } void test3(struct Student *p)
{
struct Student stu2 = {, };
p = &stu2;
p->age = ;
p->no = ;
} int main()
{
struct Student stu = {, }; //test(stu);
//test2(&stu);
test3(&stu); printf("age=%d, no=%d\n", stu.age, stu.no); return ;
}
结构体的嵌套定义
#include <stdio.h> int main()
{
struct Date
{
int year;
int month;
int day;
}; // 类型
struct Student
{
int no; // 学号 struct Date birthday; // 生日 struct Date ruxueDate; // 入学日期 // 这种写法是错误的
//struct Student stu;
};
struct Student stu = {, {, , }, {, , }}; printf("year=%d,month=%d,day=%d\n", stu.birthday.year, stu.birthday.month, stu.birthday.day); return ;
}
枚举
#include <stdio.h> int main()
{
enum Sex { Man, Woman, Unkown}; // 0男 1女 -1不详
//int sex = 3;
//enum Sex s = Unkown; // 1.定义枚举类型
enum Season
{
spring = ,
summer, //枚举中的值其实都是整型的常量 从0开始 也可以自定义开始值
autumn,
winter
}; // 2.定义枚举变量
enum Season s = ; //c语言是弱类型语言,枚举不正确的值不会报错 printf("%d\n", s); //输出的是整型常量 return ;
}
C语言-06复杂数据类型-04 结构体的更多相关文章
- 如何系统学习C 语言(中)之 结构体篇
1,结构体 在前面我们知道变量和数组都可以用来存储数据,变量用来存储单个数据,数组可以用来存储一组同类型的数据,但你有没有发现--它们都只适合单一属性的数据.那现实生活中,很多对象都是具有多属性的.例 ...
- 智能合约语言 Solidity 教程系列6 - 结构体与映射
写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 本系列文章一部分是参考Solidity官方文档(当前最新版 ...
- Go语言学习笔记十: 结构体
Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...
- 编程C语言进阶篇——自定义数据类型:结构体
一.结构体 定义方法: 结构名 变量名 特点: 两个同类型的结构变量可以相互赋值,但是结构变量之间不能使用"<","=="等运算符,如果使用则需要对运算符 ...
- C语言中的系统时间结构体类型
在C语言涉及中经常需要定时触发事件,涉及到获取系统时间,其结构体类型有多种.Unix/Linux系统下有以下几种时间结构: 1.time_t 类型:长整型,一般用来表示从1970-01-01 00:0 ...
- C语言入门(15)——结构体与数据抽象
大多数的计算机运算是对现实世界的模拟,如果想用计算机来模拟现实世界需要用到数据抽象的方法.所谓抽象是从实际的人.物.事和概念中抽取所关心的共同特征,,忽略非本质的细节,吧这些特征用各种概念精确的加以描 ...
- C语言入门(14)——结构体
整数.字符.布尔值.浮点数这些数据类型都具有单一的值,这些可称为基本数据类型.但字符串是一个例外,它由很多字符组成,像这种由基本类型组成的数据类型称为复合数据类型,正如表达式和语句有组合规则一样,由基 ...
- C语言中内存对齐与结构体
结构体 结构体是一种新的数据类型,对C语言的数据类型进行了极大的扩充. struct STU{ int age; char name[15]; }; struct STU a; //结构体实例 str ...
- c语言_文件操作_FILE结构体解释_涉及对操作系统文件FCB操作的解释_
1. 文件和流的关系 C将每个文件简单地作为顺序字节流(如下图).每个文件用文件结束符结束,或者在特定字节数的地方结束,这个特定的字节数可以存储在系统维护的管理数据结构中.当打开文件时,就建立了和文件 ...
随机推荐
- 礼仪或许就是尊重的还有一个说法——leo鉴书61
<Leo鉴书(第1辑)>已登陆百度阅读,今后还将不断更新,免费下载地址:http://t.cn/RvawZEx 礼仪从字面上就区分成"礼"和"仪"两 ...
- Android开发:TextView真正可控、不需要焦点的水平滚动--这才是真正的跑马灯
网上的TextView做跑马灯,大多都是要用到焦点,而且字数要超出滚动区域宽度才能实现滚动,使用起来十分不方便. 这里实现一种真正可控的滚动 (1)不需要焦点 (2)任意字数 (3)滚动从滚动区域右边 ...
- crash recovery
2016-07-02 17:56:07 5772 [Note] InnoDB: Database was not shutdown normally!2016-07-02 17:56:07 5772 ...
- careercup-递归和动态规划 9.4
9.4 编写一个方法,返回某集合的所有子集. 类似leetcode:Subsets 解法: 解决这个问题之前,我们先要对时间和空间复杂度有个合理的评估.一个集合会有多少子集?我们可以这么计算,生成了一 ...
- 标准I/O库之读和写流
一旦打开了流,则可在三种不同类型的非格式化I/O中进行选择,对其进行读.写操作: (1)每次一个字符的I/O.一次读或写一个字符,如果流是带缓冲的,则标准I/O会处理所有缓冲. (2)每次一行的I/O ...
- C# - 系统类 - 系统接口
ICloneable接口 ns:System 此接口只定义了一个名为Clone的方法 该方法返回一个Object对象 表示调用该方法的对象的拷贝版 IComparable接口 ns:System 此接 ...
- fuck'em
不要说GUNGHO的游戏,连逆转三国这种都没玩过,还是做手游的,表现的那么冠冕堂皇,还不只是个常规的做软件的而已.只是以做软件的程度来做游戏,能做出的是个JB.
- Xcode快捷键、小技巧与xib圆角设置
快捷键: 1.StoryBoard技巧 当你想直接在view中选择自己想要的元素时,但是又碍于一个view上叠加的元素太多很难直接选中,那么在这时,你同时按住键盘上的shift和 control键,然 ...
- gdal和python在windows上的安装
GDAL is a useful command line tool to process spatial data, if you haven’t heard of the tool before ...
- mediawiki数据库的下载地址及导入方法
mediawiki导入数据库 数据库下载:http://zh.wikipedia.org/wiki/Wikipedia:%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%8B%E8% ...