C
雲烟
可以卑微如尘土,不可扭曲如蛆虫。
展开
-
C STRUCT_OFFSET
offset(m):获取结构体S_TEST中成员m相对于首个成员的偏移量。#define offset(m) ((uint32_t)&(((struct S_TEST *)0)->m))sizeof(m):获取结构体S_TEST中成员m的大小。#define sizeof(m) sizeof(((struct S_TEST*)(0))->m)#define offset(m) ((uint32_t)&(((struct S_TEST *)0)->m))原创 2021-09-23 16:30:41 · 315 阅读 · 0 评论 -
C __attribute__
背景:头文件中经常会看到#define xxx__attribute__xxx,__attribute__的作用是什么呢?__attribute__:用来设置属性的,包括函数、变量和类型。格式:__attribute__((attribute-list)),例:__attribute__ ((aligned (4))) 、__attrubte__ ((packed))常见参数:aligned:用来手动设置字节对齐。 #define ALIGN_4 __attribute((aligne原创 2021-09-23 16:31:06 · 347 阅读 · 1 评论 -
C中需要注意的几个小问题
1.ARM 芯片对于超过4个参数的处理。2.结构体字节对齐。3.空结构体所占字节数为1。4.C99中,结构中的最后一个元素可以使未知大小的数组,即为头型数组,但是结构体的柔性数组前面必须至少有一个其他成员包含一个大小可变的数组。5.C语言结构体里面也可以包含函数,如同类中有方法一样,但是不能通过直接放过一个函数进去,需要通过函数指针的方式,同时,关于类的构造函数与析构函数C语言表示...原创 2018-09-07 17:40:21 · 151 阅读 · 0 评论 -
指针小知识
1.带有*的变量类型的标准写法,变量类型* 变量名。2.任何类型都可以带上*,加上*以后是新的类型。3.*可以是任意多个。4.不管原来什么类型,只要带*,不管几个*,就是指针,通用占用4个字节。5.指针赋值必须前后一样,“完整写法”int* x = (int *)6。 6.带*类型的变量可以加、减一个整数,但是不能乘或者除。7.带*类型变量与其他整数相加或者相减时: 带*类...原创 2019-02-17 17:57:07 · 114 阅读 · 0 评论 -
typedef与#define区别
1.typedef 只能定义类型,#define可以定义任何。2.#define 的函数不占用堆栈空间,而任何一个新的函数都会开辟新的堆栈空间。3.宏名标识符与左园括号之间不允许有空白符,应紧挨一起。4.为了避免出错,宏定义中需要给形参参加括号。5.末尾不需要分号。6.define可以替代多行的代码,但是后面要加\。...原创 2019-02-17 17:58:19 · 169 阅读 · 0 评论 -
常用汇编指令
MOV 目标寄存器,源操作数,语法: 1.MOV R/M8,R8 2.MOV R/M16,R16 3.MOV R/M32,R32 4.MOV R8,R/M8 5.MOV R16,R/M16 6.MOV R32,R/M32 7.MOV R8,IMM8 8.MOV R16,IMM16 9.MOV R32,IMM32 ...原创 2019-02-17 17:59:18 · 281 阅读 · 0 评论 -
简单单链表
定义一个单链表:#include<stdio.h>#include<stdlib.h>typedef struct Node{ int data; struct Node *next;}LinkList;创建一个长度为N的单链表:LinkList * Creat_List(int n){ LinkList * head, * node,*...原创 2019-06-06 16:51:13 · 309 阅读 · 0 评论 -
c小函数
1.交换两个变量的值void swap(int *a,int *b){ int temp = 0; temp = *a; *a = *b; *b = temp;}2.查找字符串中的大/小写字符个数(*p -= 32 或者 *p -= ' '可以将小写转大写)int Find_Low_Latter(const char * p){ int n...原创 2019-06-07 18:01:51 · 342 阅读 · 0 评论