C语言补充3
发布时间:2026/11/3 10:36:21 锦皓数字建站

1字符串和指针串讲p[-2] 等价于*(p - 2) 得到的是main()中数组元素ch[0]的值而这个值是指向字符串apple的指针。 它接收到apple的首字符地址。********数组名遇到sizeof通常 计算整个数组数组名参与普通表达式通常退化为指针。*********一级指针、二级指针、三级指针通常都是8 字节。2.大小端uint32_t x 0x12345678;知识点uint32_t32位 占4 字节因此这个数会拆成4 个字节x获取变量x的起始地址。(unsigned char *)将地址转换为字符指针。p[0]访问从起始地址开始的第 1 个字节。p[3]访问从起始地址开始的第 4 个字节。注意这里的p是unsigned char *因此p 1移动的是1 个字节不是 4 个字节。uint16_t a[3] {0x1234, 0x5678, 0x9ABC};uint16_t占2 字节数组有3 个元素数组元素还是按顺序放a[0] a[1] a[2]3.json配置补充4.unsigned int和int进行运算当unsigned int和int进行运算时在常见的 32 位int、32 位unsigned int环境下int会转换成unsigned int。5.联合体补充知识点联合体union中不管访问第几个成员所有成员都是从同一个 内存起始地址开始的。例union {int i;char c[4];} u; (它定义了一个没有 标签名的联合体类型并同时创建变量u。)u.i访问整个整数。u.c[0]访问第一个字节。u.c[1]访问第二个字节。u.c[2]访问第三个字节。u.c[3]访问第四个字节。联合体 类型名可以省略但这里的变量名u不能省略。1.联合体每个都打分号 2.要声明 联合体变量6.编写 MAX(a, b)避免参数副作用#define MAX(a, b) ({ \__auto_type max_a (a); \__auto_type max_b (b); \max_a max_b ? max_a : max_b; \})int result MAX(x, y);这个题考的是怕x执行两次 就把他们的值保存起来 进行比较 返回值的大小编写一个宏SWAP(type, a, b)交换两个同类型变量要求能够像函数一样后跟分号#define SWAP(type, a, b) \do { \type *_pa (a); \type *_pb (b); \type _temp *_pa; \*_pa *_pb; \*_pb _temp; \} while (0)为什么写成 do while0因为后面要加个分号 文本替换后 只有do while语句加个分号才刚好是完整句型do { /* 多条语句 */ } while (0) 传指针怕里面传的两个数组交换后数组里的值多次移动给他第一步的值先保存下来、你使用的pa、pb、temp都是宏内部的局部变量但如果调用时恰好使用了同名变量就可能发生名称冲突。因此建议使用更有辨识度的临时变量名7.inline向编译器建议尽可能把函数的代码直接放到调用的位置减少函数调用的开销。#include stdio.h3. 为什么传regreg是变量reg是它的地址。函数接收地址后通过*reg直接修改原变量。static inline则表示建议编译器考虑内联优化它不会改变函数的置位、清零逻辑。8.memmove()memmove()负责复制并且允许源和目标内存重叠。size_t len strlen(src) 1;memmove(dest, src, len);dest目标内存的起始地址。src源内存的起始地址。len复制的字节数strlen(src) 1包含最后的\0。9.size_t10.calloc()calloc()会把申请到的内存全部初始化为0。calloc()是 C 语言标准库stdlib.h中的动态内存分配函数。calloc(元素个数, 每个元素的大小);11.free()free()释放的是之前通过动态内存分配函数申请的内存而不是释放变量本身。12.static和extern只有 外部链接可以通过extern声明访问。13.结构体
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。