C/C++
文章平均质量分 73
C语言学习心得
Wu Junwu
从事嵌入式软件开发工作
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
typedef用法详解
typedef与#define的区别: (1)typedef创建的符号名只限于类型,不限于值 (2)typedef由编译器解释,不是预处理器 typedef的四种用法 在实际应用中,typedef主要有下面四种用法: 1)typedef基本数据类型取“别名” 也就是说,C语言中的所有数据类型都可以用typedef关键词来重新定义类型名 typedef unsigned int size; typedef unsigned int16 u16; typedef unsigned int8 u8; . . .原创 2020-10-14 15:54:38 · 45368 阅读 · 4 评论 -
双(向)链表的创建,节点插入、遍历、删除
/* time:2020年9月21日09:50:25 objective:双链表节点创建、插入、遍历、删除 author:wujunwu */ #include<stdio.h> #include<stdlib.h> #include<string.h> //节点模板 struct node { struct node *pPrev; int data; struct node *pNext; }; //创建节点函数 struct node *create_原创 2020-09-21 16:10:15 · 292 阅读 · 0 评论 -
内存中存储分布方式:大端模式、小端模式
大端模式:高字节对应高地址 小端模式:高字节对应低地址 判断代码如下: 方法一: /* time:2020年9月10日20:01:17 objective:判断内内存中存储的两种分布方式 author:wujunwu */ #include<stdio.h> //方法一 int func(void) { int a=1; char b=*((char *)(&a)); return b; } //主函数 int main (void) { int i=func();原创 2020-09-10 21:13:31 · 486 阅读 · 4 评论 -
单链表的节点创建、访问、插入、遍历、逆序
创建一个链表一个节点 /* time:2020年9月9日20:12:24 obective:创建一个链表 author:wujunuw */ #include<stdio.h> #include<stdlib.h> #include<string.h> //定义节点中的有效数据和指针 int data; struct node *PNext; //创建节点 struct node { int data; //有效数据 struct node *PNex原创 2020-09-10 19:30:58 · 988 阅读 · 0 评论 -
创建静态链接库/动态链接库
1. 创建静态链接库 第一步;创建一个源代码 /* 创建静态链接库的源代码 */ #include<stdio.h> void func1(void) { printf(“wujunwu\n”); } int func2(int x,int y) { return x+y; } 第二步:创建一个.h文件作为函数声明 void func1(void); int func2(int x,int y); 第三步:创建一个makefile文件编译 all: gcc wujunwu.原创 2020-09-04 21:53:54 · 598 阅读 · 0 评论 -
静态链接库和动态链接库的工作原理
静态链接库原创 2020-09-04 21:31:15 · 263 阅读 · 0 评论 -
container_of 宏
/* time:2020年8月31日14:55:17 objective:理解container_of宏 function:知道结构体中某变量的指针(地址)和偏移量offsetof(type,member)(&((type*)0)->member) 反求结构体首地址 author:wu_junwu */ #include<stdio.h> //获得结构体中某变量member的偏移量 #define offsetof(type,member)((int)&am原创 2020-08-31 20:38:25 · 345 阅读 · 0 评论 -
offsetof宏
/* time:2020年8月31日14:14:34 objective:理解宏offsetof的用途 function:自动计算结构体中变量的偏移量 author:wu_junwu */ #include<stdio.h> struct definestruct { int a; char b; short c; long d; }__attribute__((packed)); //__attribute__((packed))取消对齐访问,注意:attribute前后下划线分原创 2020-08-31 14:49:16 · 409 阅读 · 0 评论 -
指针和多维数组的那点事儿
俗话说:学C语言不懂指针纯属瞎忙活… 为什么要用指针? 因为计算机的硬件指令非常依赖地址,指针更加接近机器语言,使得一些编译器在编译时效率更高。 一重指针变量比较简单,这里我们主要来理解二重指针!!! 说到指针、数组大家都不会陌生。但是,今天我们要明白: 什么是数组指针?什么是指针数组? 数组指针:从中文的语句结构中知道:这里的“数组”是修饰“指针”的。所以重点在于“指针"。即数组是修饰词 指针数组:相反,这里的重点是“数组”,指针用于修饰"数组"一词。 举例://定义不同的数组指针或指针数组 int *原创 2020-08-28 09:47:34 · 223 阅读 · 0 评论 -
无家可归的野指针
野指针 首先了解定义指针的三步骤: 第一步:定义指针变量 int *p; 第二步:绑定 p=&a //让指针指向a变量的地址 或者也可以这样绑定:p=(int *)4 //让指针指向地址为4的变量 第三步:解引用 *p=100; //表示变量本身 简单的理解就是指针地址是随机的,“瞎乱指向的”。 先看一段简单的代码: include<stdio.h> int main(void) { //定义指针变量 int *p; //解引用 *p=100;原创 2020-08-21 20:48:14 · 241 阅读 · 0 评论 -
内存那点事儿之“内存管理”——栈、堆、数据段(数据区)
问题:内存是暂存数据变量的场所,这些内存是如何分配给数据的呢?也就是说这些数据是如何在内存中排布的呢? 首先要明白一个排布的工具:数据结构 数据结构:数据结构就是研究数据如何组织加工的 常见的数据结构有:数组(最简单的数据结构)、结构体、栈、堆、队列、链表、哈希表、二叉树………… 数组 数组是管理内存和普通变量本质上没有太大差别 普通变量int a——首先,编译器在内存中申请一段内存(4字节),获得该内存的地址(编译器知道地址,我们程序员不知道地址是多少,也没必要知道); 然后将内存分配给a,再将数据变量名原创 2020-08-21 17:57:40 · 1773 阅读 · 0 评论 -
内存那点事儿之“数据类型和内存的关系”
数据类型和内存的关系 首先我们来了解一下内存的概念图形是怎样的?(以32位系统的内存为例) 内存:存储变量的地方 当我们在32位系统中定义一个变量,最好将这个变量的数据类型定义成int(或者其他4字节的数据类型),因为这样可以使得效率最高。原因在于内存硬件的配置更加合适32位即4字节的数据类型的变量。但是也不能说不能定义像8位(2字节)的char类型,但是效率低。 即使使用一个bit就可以定义的bool类型时,系统也会给bool分配32位内存,效率高,不吝啬内存空间。 内存对齐 若要在内存中存储一个数字i原创 2020-08-20 22:44:02 · 1184 阅读 · 0 评论 -
C语言中基本的位操作(重点——移位):
C语言中的位操作: 首先大家要明白位操作中的常用的操作符有:位与、位或、位异或。 位与:符号是‘’&‘‘(注意这里的&和‘’逻辑与‘’中的&&不同)。其特点是当两个位操作数是1&1=1,1&0=0,0&0=0 位或:符号是‘’|‘’。特点是当两个位操作数中有一个是1,结果就是1;当两个位操作数中都为0,则结果为0 位异或:符号是‘’^‘’。特点是当两个位操作数不同时,结果为1;当两个操作数相同时,结果为0. 下面是位操作在寄存器中的“大显身手” 我们知原创 2020-08-17 14:26:20 · 1306 阅读 · 0 评论
分享