C/C++
文章平均质量分 73
C语言学习心得
Wu Junwu
2022年7月研究生毕业从事嵌入式软件开发工作
展开
-
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 · 44548 阅读 · 4 评论 -
双(向)链表的创建,节点插入、遍历、删除
/* time:2020年9月21日09:50:25objective:双链表节点创建、插入、遍历、删除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 · 236 阅读 · 0 评论 -
内存中存储分布方式:大端模式、小端模式
大端模式:高字节对应高地址小端模式:高字节对应低地址判断代码如下:方法一:/*time:2020年9月10日20:01:17objective:判断内内存中存储的两种分布方式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 · 380 阅读 · 4 评论 -
单链表的节点创建、访问、插入、遍历、逆序
创建一个链表一个节点/*time:2020年9月9日20:12:24obective:创建一个链表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 · 870 阅读 · 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 · 509 阅读 · 0 评论 -
静态链接库和动态链接库的工作原理
静态链接库原创 2020-09-04 21:31:15 · 177 阅读 · 0 评论 -
container_of 宏
/*time:2020年8月31日14:55:17objective:理解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 · 244 阅读 · 0 评论 -
offsetof宏
/*time:2020年8月31日14:14:34objective:理解宏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 · 249 阅读 · 0 评论 -
指针和多维数组的那点事儿
俗话说:学C语言不懂指针纯属瞎忙活…为什么要用指针?因为计算机的硬件指令非常依赖地址,指针更加接近机器语言,使得一些编译器在编译时效率更高。一重指针变量比较简单,这里我们主要来理解二重指针!!!说到指针、数组大家都不会陌生。但是,今天我们要明白:什么是数组指针?什么是指针数组?数组指针:从中文的语句结构中知道:这里的“数组”是修饰“指针”的。所以重点在于“指针"。即数组是修饰词指针数组:相反,这里的重点是“数组”,指针用于修饰"数组"一词。举例://定义不同的数组指针或指针数组int *原创 2020-08-28 09:47:34 · 143 阅读 · 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 · 175 阅读 · 0 评论 -
内存那点事儿之“内存管理”——栈、堆、数据段(数据区)
问题:内存是暂存数据变量的场所,这些内存是如何分配给数据的呢?也就是说这些数据是如何在内存中排布的呢?首先要明白一个排布的工具:数据结构数据结构:数据结构就是研究数据如何组织加工的常见的数据结构有:数组(最简单的数据结构)、结构体、栈、堆、队列、链表、哈希表、二叉树…………数组数组是管理内存和普通变量本质上没有太大差别普通变量int a——首先,编译器在内存中申请一段内存(4字节),获得该内存的地址(编译器知道地址,我们程序员不知道地址是多少,也没必要知道);然后将内存分配给a,再将数据变量名原创 2020-08-21 17:57:40 · 1573 阅读 · 0 评论 -
内存那点事儿之“数据类型和内存的关系”
数据类型和内存的关系首先我们来了解一下内存的概念图形是怎样的?(以32位系统的内存为例)内存:存储变量的地方当我们在32位系统中定义一个变量,最好将这个变量的数据类型定义成int(或者其他4字节的数据类型),因为这样可以使得效率最高。原因在于内存硬件的配置更加合适32位即4字节的数据类型的变量。但是也不能说不能定义像8位(2字节)的char类型,但是效率低。即使使用一个bit就可以定义的bool类型时,系统也会给bool分配32位内存,效率高,不吝啬内存空间。内存对齐若要在内存中存储一个数字i原创 2020-08-20 22:44:02 · 965 阅读 · 0 评论 -
C语言中基本的位操作(重点——移位):
C语言中的位操作:首先大家要明白位操作中的常用的操作符有:位与、位或、位异或。位与:符号是‘’&‘‘(注意这里的&和‘’逻辑与‘’中的&&不同)。其特点是当两个位操作数是1&1=1,1&0=0,0&0=0位或:符号是‘’|‘’。特点是当两个位操作数中有一个是1,结果就是1;当两个位操作数中都为0,则结果为0位异或:符号是‘’^‘’。特点是当两个位操作数不同时,结果为1;当两个操作数相同时,结果为0.下面是位操作在寄存器中的“大显身手”我们知原创 2020-08-17 14:26:20 · 1184 阅读 · 0 评论