摘要: 如果想在不同的时刻把不同的东西存储与同一个内存位置,那就应该使用联合。 联合的初始化比较特殊,只需要初始化第一个成员类型即可(必须是第一个成员变量)。 阅读全文
posted @ 2021-07-04 16:32 Erden 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 位段的声明和结构体的声明相同。除了: 位段成员必须声明为int,signed int,unsigned int(最好不要使用int,因为int是有符号还是没有符号是由编译器决定的)。 成员名的后面是一个冒号和一个整数,整数表示这个位段所占用的位数(bit)。 例子 1: 例子 2: 1 #inclu 阅读全文
posted @ 2021-07-04 16:25 Erden 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 自引用: 实现链表/树的时候,我们用到结构体的自引用。 不完整的声明: 阅读全文
posted @ 2021-07-04 16:24 Erden 阅读(139) 评论(0) 推荐(0) 编辑
摘要: int vector[10] void func(int *vec) Or void func(int vec[]) int vector[10][20] void func(int (*vec)[20]) Or void func(int vec[][20]) int vector[10][20] 阅读全文
posted @ 2021-07-03 22:58 Erden 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 相减: 两个指针可以相减,相减的结果的类型是ptrdiff_t(这个是一个有符号整数类型)。 相减的结果:数组元素的长度为单位,而不是以字节为单位。 两个指针必须都指向同一个数组中的某个元素。 1 typedef struct { 2 int a; 3 int b; 4 int c; 5 int d 阅读全文
posted @ 2021-07-03 22:21 Erden 阅读(68) 评论(0) 推荐(0) 编辑
摘要: 1.如果sizeof的操作数是数组名,则返回数组的长度。 2.判断表达式的长度时,不会对表达式进行求值。 int main() { short int a,b; a = 6; b = 2; printf("sizeof(a+b):%d,sizeof(a-b):%d,sizeof(a=b+1):%d, 阅读全文
posted @ 2021-07-01 21:36 Erden 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 逻辑移位:不关注符号位(最高位),每个bit向左或者向右移位,最高位或者最低位由0补齐。 算数移位:关注符号位(最高位)。 算数左移:跟逻辑左移一样,每个bit向左移位,低位由0补齐。 算数右移:符号位(最高位)保持不变,每个bit向右移位,次高位由符号位补齐。 例子 1:逻辑移位和算数移位都一样的 阅读全文
posted @ 2021-06-30 23:27 Erden 阅读(439) 评论(0) 推荐(0) 编辑
摘要: 1 #include<stdio.h> 2 3 void test_function(int input) 4 { 5 switch(input) 6 { 7 case 0: 8 printf("input is 0\n"); 9 case 1: 10 printf("input is 1\n"); 阅读全文
posted @ 2021-06-27 21:51 Erden 阅读(45) 评论(0) 推荐(0) 编辑
摘要: do...while的语法是: do statement while( expression); continue语句之后,expression会执行吗?答案是是的。 阅读全文
posted @ 2021-06-27 21:31 Erden 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 关键字register可用于自动变量的声明,提示自动变量应该存储于硬件上的寄存器而不是内存中。 寄存器变量的访问比存储于内存中的变量访问效率更高。 但是编译器不能把所有声明为register的自动变量都存储于寄存器中,而是只选取前面的几个存于寄存器中,剩下的按普通的自动变量处理。 对函数而言,存储类 阅读全文
posted @ 2021-06-27 21:24 Erden 阅读(56) 评论(0) 推荐(0) 编辑