选择结构 if else 选择结构 1. else 只与上面离它最近的一个 if 配对。 2. C语言中,编译器忽略缩进,所以 if else 配对不看缩进。...if else 基本结构: #define _CRT_SECURE_NO_WARNINGS #include int main() { int i = 0; scanf("%d"...%d 岁\n",i); } else { printf("你还未成年\n"); printf("今年你 %d 岁\n", i); } return 0; } if else 双层嵌套结构...; else if(i==18) printf("刚好成年\n"); else if(i>18) printf("已经成年\n"); return 0; } switch case 选择结构... switch case 基本结构: switch (expression) { case value1: statement case value2: statement
结构体 结构体是用户建立由不同类型数据组成的混合型的数据结构(数据类型)。 系统提供的类型:int double float char long 数组,指针......一般形式: struct 结构体名{ 成员; }; 例如:定义一个学生的结构体,学生包括姓名,性别,年龄。声明一个学生的变量,输出学生的信息。...Student stu,stu2; strcpy(stu.name,"zhangsan"); stu.sex='M'; stu.age=10; printf("%s %c...%d\n",stu1.name,stu1.sex,stu1.age); printf("%s %c %d\n",stu2.name,stu2.sex,stu2.age); printf(...%d\n",a[i].name,a[i].sex,a[i].age); } return 0; } 结构体指针 结构体指针是指向结构体变量的指针,一个结构体变量的地址就是这个结构体变量的指针
前言 还记得我在总结操作符时,涉及到了结构体,在C语言中类型分为两大类一个是内置类型,一个是自定义类型,常见的内置类型我们不说,我们今天来好好看一看为自定义类型之一的结构体吧 个人主页:小张同学zkf...但有一些特殊情况,让我们来看一下 // 匿名结构体类型 struct { int a; char b; float c; }x; struct...{ int a; char b; float c; }a[ 20 ], *p; 这种就是匿名结构体类型,你会发现这个结构体类型没有名字,那么可以...光说结论肯定不好理解,我们来看几道题 struct S1 { char c1; int i; char c2; }; printf ( "%d...12 再来一道 // 练习 2 struct S2 { char c1; char c2; int i; }; printf ( "%
让我们走进结构体 一.结构体 1.1 什么是结构体 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。...1.2 结构体的声明 例如用结构体描述一个学生 1.3 特殊的声明 在声明结构体时,可以不完全声明,也就是匿名结构体类型 1.4 结构的自引用 结构的自引用就是自己作为自己的成员变量 但是要注意正确的引用方法...结构体变量的嵌套初始化 1.6 结构体内存对齐 来计算一下结构体的大小 来计算一下结构体的大小如果不了解的话可能会觉得是 6 6 13 为什么最终结果会是这样呢?...这就要掌握首先得掌握结构体的对其原则 1.6.1结构体的对其原则 一. 二.结构体嵌套问题 为什么存在内存对齐?...如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。 因此结构体传参的时候,要传结构体的地址。
一、结构体 结构的基础知识 结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。...结构体初始化 ---- ---- 四.结构成员的类型 结构成员可以使标量、数组、指针、甚至是其它结构体 五.结构体变量的定义和初始化 有了结构体类型,如何定义变量 ---- ---- 六.结构体成员访问...6.1结构体变量访问成员 结构变量的成员是通过点操作符(.)访问的 点操作符接受两个操作数。...---- 6.2结构体指针访问指向变量的成员(箭头操作符 ->) 有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。...如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销过大,所以会导致性能的下降。 结论:结构体传参的时候,要传结构体的地址。
结构体 结构体的声明 struct TAG { //member_list;//结构体内部成员 }/*variable*/;//结构体的名字,或者指针在这里 例如 struct...tag { int i;//结构体内部成员 char a;//结构体内部成员 double e;//结构体内部成员 char arr[];//结构体内部成员 }F,*p;//结构体的名字,或者指针在这里...数倍 例如 struct A { char a; int b; char c; }; struct B { char a; char b; int c; };...struct C { int c; char a; char b; }; struct D { int a; short b; char c; }; int main() { printf...//4个字节 4-7 4的倍数正好 8 }; struct C { int c;//4 0-3 char a;//1 4 char b;//1 5 因为要是4的倍数 占到8 }; struct
大家好,我是泽奀,本篇博客就带大家来(初始)C语言的结构体的内容,后面也会发布一篇进阶的内容。...目录 结构体基础: typedef作用: 结构体的作用: 结构体的大小与内存对齐: 结构体成员的类型 结构体成员 结构体(套娃‘doge’) 结构体传参和传值 1.传参 2.传址 各位,这两个函数如果要选择一个的话...因为: 结构体基础: 结构是一些值的集合,这些值被称作是成员之间的变量。结构体 每个成员可以是不同类型变量。 ...typedef作用: 想了想,还是把typedef单独拿出来说一说吧 C 语言提供了 typedef 关键字,你可以使用它来为类型取一个新的名字。...看到这里可能有些人会感觉和#deifne怎么感觉一样,那在这里我说下: #define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同: typedef 仅限于为类型定义符号名称
,如果没有对结构体进行重命名的话,仅能使用一次 struct { int a; char b; float c; }x; 形如上面代码的结构体未重命名的话,使用这一次便被回收 4...4个字节放入 char c2;//1字节,<8,放在8位置处 }; 又因为现在指向9位置处,9不是最大对齐数4的整数倍,所以要指向12处,所以结构体S1的大小为12字节 printf打印一下:...16 }; 因为最大对齐数为8,16为8的整数倍,所以结构体S3的大小就是16个字节 struct S4 { char c1;//1字节,放到0位置处 struct S3 s3;//16字节,以8为对齐数...,对齐的内存只需要一次访问,而不对齐的内存需要两次访问 结构体的内存对齐是拿空间来换取时间 我们可以将占用内存小的尽量集中在一起来节省空间 struct S1 { char c1; int i;...char c2; }; struct S2 { char c1; char c2; int i; }; 3、修改默认对齐数 #pragma #include #pragma
前言 在C语言中,有两种类型,一种是内置类型,可以直接使用,包括char short int long long long float double;一种是自定义类型,当内置类型不能满足时,支持自定义一些类型...来看看这个例子: struct S1 { char c1; char c2; int a; }; struct S2 { char c1; int a; char c2; }; int...对于s1而言:char c1,占一个字节,而VS中默认的值为8,1小,所以选择1,而结构体的第⼀个成员对齐到相对结构体变量起始位置偏移量为0的地址处。所以c1就占了0。...总的用了8个地址空间 最后最后因为结构体总大小为最大对齐数(结构体中每个成员变量都有一个对齐数,所有对齐数中最大的)的整数倍,这里最大的为4,所以就是8 对于s2而言: char c1和s1中的一样...结构体实现位段 结构体讲完就得讲讲结构体实现 位段 的能力 6.1 什么是位段 位段的声明和结构是类似的,有两个不同: 位段的成员必须是 int、unsigned int 或signed int ,在C99
C语言提供了while,do...while,for三种语句构成循环结构。...但是这两个内存循环不能相互交叉; 3,①嵌套循环的跳转:只能跳出本层循环;②禁止从外层跳入内层;禁止跳入同层的另一循环和向上跳转 二,转移语句 (1)break语句 使用范围:break语句只能用于switch或循环结构中...用法: 在switch语句中,break的作用是:结束switch结构。...流程图: (2)continue语句 使用范围:只能用于循环结构中 用法: 当遇到continue语句时,程序会跳过位于 continue 后面的代码,直接回到判断的部分,进行下一轮的循环判断 流程图:...(3)goto语句 goto是无条件转移语句(便于运用在:从多层循环结构代码中快速跳出) 用法: 同一个函数内,设置好标号后,goto可以无条件的把程序转移到语句标号所在的位置开始执行(可以跨层) 举例
就类似于sql中的存储一样,随着语言层次的增高封装性是越来越大的。...应该这样引用: int main() { boy1.num = 01; boy1.sex = 'M'; printf("%d,%c", boy1.num, boy1.sex...); } 对于结构体的基础语法说完了,下面来说结构体指针 结构体指针 一个结构体变量的指针就是该结构体变量所占据内存段的起始地址。...有了结构指针变量,就更方便地访问结构变量的各个成员。...在C语言中不允许动态数组类型。例如:a[n]就是错误的,必须要用一个实际的数字表示数组长度,但是在实际开发中,往往会发生这种情况,即所需要的内存空间取决于实际输入的数据,而无法预先确定。
简单的哈希表实现 这是一个简单的哈希表的实现,用c语言做的。 原理 先说一下原理。 先是有一个bucket数组,也就是所谓的桶。...这是包含的头文件 #include #include #include #define BUCKETCOUNT 16 哈希表和节点数据结构的定义 struct hashEntry { const...1103515245 + (int)key[i]; } index >>= 27; index &= (BUCKETCOUNT – 1); return index; } 辅助函数strDup 这是比较多余的做法,因为C标准库中...; insertEntry(&t , “显卡” , “NVIDIA GeForce GTX 850M (2 GB / 华硕)”); insertEntry(&t , “显示器” , “奇美 CMN15C4
1.结构体的声明 1.1 结构体的基础知识 结构是一些值的集合,这些值称为成员变量。...结构的每个成员可以是不同类型的变量 如果说数组是一组相同类型元素的集合,那么结构体就是一组不一定相同元素的集合 1.2 结构的声明 struct tag { member-list; }variable-list...、数组、指针,甚至是其它结构体 1.4结构体变量的定义和初始化 有了结构体类型,那么接下来就要定义变量了。...struct node n2 = {20,{5,6}.NULL}//结构体嵌套初始化 2.结构体成员的访问 结构体变量访问成员 结构体变量的成员是通过点操作符(.)访问的。...如果传递的结构体太大了,参数压栈的系统开销比较大,所以会导致性能的下降。 如果你需要保留函数中对结构体的修改,也是需要传递地址的。 综上: 结构体传参的时候,尽量传结构体的地址。 完
对齐原则 原则A:struct或者union的成员,第一个成员在偏移0的位置,之后的每个成员的起始位置必须是当前成员大小的整数倍 原则B:如果结构体A含有结构体成员B,那么B的起始位置必须是B中最大元素大小整数倍地址...(相当于先将嵌套结构体展开) 原则C:结构体的总大小,必须是内部最大成员的整数倍 示例 代码 struct A { int a; char b; char c; }; struct...B { char b; int a; char c; }; struct C { int a; char b[10]; char c; }; struct...D { char b[10]; int a; char c; }; struct E { char b; char e; char f; int...B b; struct C c; struct D d; struct E e; struct F f; printf("char:%d,short:%d,int
举例: struct MyStruct { char a; int b; char c; }; //根据内存对齐规则,结构体MyStruct的内存布局如下: //a的大小为...//c的大小为1字节,由于前一个成员b的大小为4字节,所以c的偏移量为4的整数倍,即8。 //因此,结构体MyStruct的总大小为8字节。 4. ...举例: struct S1 { char c1; int i; char c2; }; struct S2 { char c1; char c2; int i; }; //这样排序s1只占了...我们可以通过一个指令来修改默认对齐数满足自己的需要 #pragma 预处理指令 #include #pragma pack(1)//设置默认对⻬数为1 struct S { char c1...; int i; char c2; }; #pragma pack()//取消设置的对⻬数,还原为默认 int main() { printf("%d\n", sizeof(struct S));
在c语言中像这种信息采集表形式的数据结构是通过结构体来实现的。其中姓名,年龄等信息就是结构体的成员变量,显然这些结构体的成员变量可以是不同的数据类型。...结构体变量的创建和初始化 匿名结构体类型 在声明结构体的时候,可以不完全声明,比如: struct { int a; char b; float c; }x; 上⾯的结构体在声明的时候省略掉了结构体标签...指定初始化 指示初始化方式(C99),这种方式允许不是按照成员顺序初始化。...看如下几个例子: //练习1 struct S1 { char c1; int i; char c2; }; printf("%d\n", sizeof(struct S1...));//---12 练习1的分析: 变量 变量大小 默认对齐数 对齐数 c1 1 8 1 i 4 8 4 c2 1 8 1 通过上面表格,我们可以想象到其在内存中存储的大概: //练习2 struct
C语言结构体类型 C语言中允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体。在其他一些高级语言中称“记录”。...C语言如何定义结构体类型变量 先声明结构体类型,再定义该类型的变量 在定义了结构体变量后,系统会为之分配内存单元。根据结构体类型中包含的成员情况,在Visual C++中占63个字节。...C语言结构体变量的初始化和引用 在定义结构体变量时可以对它的成员初始化,初始化列表是用花括号括起来的的一些常量,这些常量依次赋给结构体变量中的各成员。...以上,如果你看了觉得对你有所帮助,就给小林点个赞,分享给身边的人叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~ C语言学习路线 C语言开发工具 VC6.0、Devc++、VS2019使用教程...100道C语言源码案例请去公众号:C语言入门到精通
一、同时定义多个变量 我们都知道C语言中变量的类型决定了变量存储占用的空间。...如上面的student结构体包含三个成员,分别是name、num、age。 结构体是C语言中的一种构造类型。C语言的数据类型如下图: ?...此处使用typedef为结构体模板struct student定义一个别名student,关于typedef的介绍移步至往期笔记:【C语言笔记】#define与typedef的区别?...C99和C11为结构提供了指定初始化器(designated initializer)。其初始化器使用点运算符和成员名。...结构体是一块很重要的内容,用得很多。关于结构体的内存对齐可查看往期笔记:【C语言笔记】C语言结构体内存对齐问题 以上就是关于结构体的一些笔记,如有错误欢迎指出。谢谢!
函数是C程序的主要部分 程序的几乎全部工作都是由各个函数分别完成的,函数是C程序的基本单位,在设计良好的程序中,每个函数都用来实现一个或几个特点的功能。...程序中对计算机的操作是由函数中的C语句完成的 如赋值,输入输出数据的操作都是由相应的C语句实现。 在每个数据声明 和语句的最后必须有一个分号 分号是C语句的必要组成部分。...C语言本身不提供输入输出语句 输入和输出的操作是由库函数scanf和printf函数来完成。 程序应当包含注释 一个好的、有使用价值的源程序都应当加上必要的注释,增加程序的可读性。...——图灵 文字/闫小林 图片/源于网络 - END -
我们平时使用的C语言类型类型主要是整数类型、浮点数类型以及指针类型,你是否想过我们该如何将一串不同类型的数据整合起来,实现封装?...事实上,C语言也提供给我们一些自定义类型,让我们可以自由的进行数据组合和使用。 结构体 结构体类型的声明 结构体是什么? 结构体是一些值的集合,这些值称为成员变量。...struct s1 { char c1; int i; char c2; }; c1的对齐数是1,vs环境下的默认对齐数是8,所以c1对应着偏移量为0的位置,i是int 类型的,占4个字节,...与8相比,较小的是4,所以对齐数为4,所以偏移量为4的位置,c2也是一个字节所以在偏移量为8的位置,整个整个结构体的偏移量为4,所以总大小必须为4的倍数,所以还要再多消耗3个比特位,所以最终结构体的大小为...struct A { int _a:2; int _b:5; int _c:10; int _d:30; }; 这里的A就是位段 那么该如何计算位段的大小呢? 位段的内存分配 》1.
领取专属 10元无门槛券
手把手带您无忧上云