
C/C++
墨尔基阿德斯
这个作者很懒,什么都没留下…
展开
-
c语言结构体嵌套的对齐方式
1:在代码中有结构体嵌套的方式,又需要获取每个变量的地址。那么需要了解结构体嵌套和单一结构体的一些对齐方面的规则。2:对于嵌入式的设备来说,对齐很重要,有些cpu不支持不对齐的访问方式,有的cpu支持,只是效率上会降低。3:arm中默认编译的时候会进行对齐。规则一:结构体中的第一个成员位置在偏移量0,之后每个变量的偏移量必须是它本身字节数的整数倍。规则二:如果结构体中嵌套结构体,那么嵌套的结构体的偏移量必须是它最大成员的字节数的整数倍。规则三:结构体的总偏移量必须是它最大成员字节数的整数倍(包括嵌转载 2021-12-24 10:11:15 · 1347 阅读 · 0 评论 -
如何理解x&(-x)和x&(x-1)
文章目录 对于x&(-x) 只保留首位1对于x&(x-1) 消除首位1 x&(-x):保留二进制下最后出现的1的位置,其余位置置0(即一个数中最大的2的n次幂的因数); x&(x-1):消除二进制下最后出现1的位置,其余保持不变; 具体分析如下: 二进制下的数字都可以写成(A)1(B)的形式,其中A表示一串01字符串,1表示从右向左的出现的第一个数字1,B表示空(奇数)或者是连续的0(偶数),即: 偶数:(A)1(00…0) 奇数:(A)1 对于x&a...原创 2021-11-08 09:55:36 · 404 阅读 · 0 评论 -
宏定义高级用法
跨行的宏定义 使用反引号\连接#定义一个交换数值的多行宏,使用反斜杠连接不同行#define SWAP(a,b) do { int t = 0;t = a; a = b; b = t; } while(0)三个特殊符号:#,##,#@#define CONNECT(a,b) a##b#define TOCHAR(a) #@a#define TOSTRING(a) #a//a##b表示连接int n = CONNECT(123, 456); .原创 2021-10-11 22:20:48 · 626 阅读 · 0 评论 -
内存池的实现
https://www.cnblogs.com/bangerlee/archive/2011/08/31/2161421.htmlhttps://www.cnblogs.com/bangerlee/archive/2011/09/01/2161437.html原创 2021-06-29 14:15:02 · 102 阅读 · 0 评论 -
C语言中,为什么字符串可以赋值给字符指针变量
出处https://www.cnblogs.com/KingOfFreedom/archive/2012/12/07/2807223.html本文是通过几篇转帖的文章整理而成的,内容稍有修改:一、C语言中,为什么字符串可以赋值给字符指针变量char *p,a='5';p=&a;  ..转载 2021-06-02 14:25:58 · 1815 阅读 · 0 评论 -
#define命令的一些高级用法
参考:https://blog.youkuaiyun.com/xiahouzuoxin/article/details/9494503 一 、宏的定义与撤销 #普通宏定义#define PI 3.14 //编译阶段替换掉宏#define T1 3+4 //容易产生歧义#define T2 (3+4) //添加括号后,语义清楚 float r = 1.0;float area = PI * r * r; int a = 2* T1 #宏替换后变成...转载 2021-05-14 15:37:46 · 837 阅读 · 0 评论 -
数组名加取地址符
指出下面代码的输出,并解释为什么。(不错,对地址掌握的深入挖潜)main(){ int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1));}输出:2,5 *(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5,&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int),所以,int *.转载 2021-05-13 11:19:17 · 1742 阅读 · 0 评论 -
C++中类所占的内存大小以及成员函数的存储位置
https://blog.youkuaiyun.com/luolaihua2018/article/details/110736211转载 2021-03-24 11:27:23 · 192 阅读 · 0 评论 -
求将一个数的二进制位逆序算法
//输入1个字节,将其二进制位颠倒后,再输出1个字节//比如input:0110 0101 output:1010 0110uint8_t bit8_order_reverse(uint8_t ch){ uint8_t ch_new = 0; uint8_t bit_val = 0x80; uint8_t bit_val_reverse = 0x01; while (bit_val) { if (ch & bit_val) .原创 2021-02-05 22:34:13 · 402 阅读 · 0 评论 -
scanf getchar gets cin getline区别
scanf 与 getchar 读取字符char a, b;scanf("%c", &a);b = getchar();scanf与getchar在读取单个字符时相同,空格、tab、回车都是字符。scanf与gets读取字符串char str[10];char a;scanf("%s", str);a = getchar();printf("Str=%s***%c***", str, a);scanf读取字符时遇到空格、tab、回车时终止,并把空格、tab、回车遗留在输入缓原创 2021-02-05 11:33:45 · 277 阅读 · 0 评论