ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

c语言与程序编程的查漏补缺

2026/9/6 23:55:32 拓冰建站 浏览量
c语言与程序编程的查漏补缺 动态内存分配使用malloc函数申请一块内存,记得用完这个内存之后记得free掉这块内存,将这块内存还回去函数用到的头文件:stdlib.hmalloc函数的函数值是size t 返回的是一个void型的指针条件运算符count (count 20)?count - 10:count 10;相当于:if(count 20){count count - 10);else {count count 10);静态本地变量1.关键词:static 在函数里头这个值在离开函数之后不会变,当再进去函数时候,这个变量等于上次离开时候保留下来的值 不再被初始化2.实际上是是全局变量 它与全局变量有相同的内存区域和生存期有函数内的局部作用域 作用域是局部的(全局生存区 本地作用域)按位运算1.:两个都是1则为1 否则为0应用:(1)让某一位或者某些位为0 :例如 x0xFE-让最低位为0(0xFE最低位是0:1111 1110)(2):取一个数中的一段:x0xFF2.|:按位取或:其中一个为1,则为1,两个都是0才为0;应用:(1)使得一位或几个位为1:x|0x01-这个数最后一位一定是1(2)把两个数拼起来:0x00FF|0xFF003.按位取反~:把1变成0,把0变成1应用: (1):想得到全部位为1的数:~0;4.按位异或^:如果两个位相等,那么结果为0,不相等则为1;移位运算(1).左移:例如iji中所有的位向左移动j个位置,而右边填入0;所有Int的类型,位移以int的方式来做,结果是int;(2).x1:等价于x*2;xn:等价于x*2^n2.右移:(1)例如ij:i中所有的位向右移j位所有小于int的类型(2)对于unsigned的类型,左边填入0对于signed的类型,左边填入原来的最高位(保持符号不变)(3)x1等价于:x/2xn等价于x/2^n实例直接操作寄存器中的一些移位与位运算的写法:1.改变数据中的某一位而不影响其他位:例如 有一变量/寄存器uint8_t REG 将其位2置1,其他位不变:可以写成:REG | 0x04---(REG | 0000 0100)2.将其位2清0,其他位不变:REG ~0x04 ------REG 1111 1011总结:(1)0x04是位2的掩码(2) | 位掩码,将此位置置1,其他位置不变(3) ~位掩码,将次位清0,其他位不变3.使用结构体打包传参常规做法:(1)定义函数(2调用函数)结构体打包传参:(1)定义结构体(2)定义函数(参数是结构体指针类型)(3)调用函数这种方式类似于单片机中初始化外设,利用结构体指针传参的初始化方式指针传递与值传递对比举例举例:(1)写法1:指针传递:函数传参直接传指针 地址:假设函数定义void function(S_t *p)调用方式:function(a)传入内容:结构体变量a的内存地址内存占用:只传地址,通常占用4或8个字节优点:能通过指针修改外部的a,外部a会同步改变 有效率快 开销小(2)写法2:值传递:函数定义:void function(S_t p);调用方式:function(a);传入内容:结构体变量a的完整剧本副本内存占用:复制整个结构体 相比于指针传递占用的内存更大 将结构体的成员的值全部复制过来的内存缺点:不能修改外部的a的值 修改的是副本 外部a的值会纹丝不动,效率慢,大结构体频繁拷贝浪费CPU和内存(浪费时间和空间)优点:保证数据隔离与安全