c语言
文章平均质量分 64
c语言学习
Fireworks_light
业精于勤,荒于嬉; 行成于思,毁于随。
展开
-
C语言积累 -(#,##,__VA_ARGS__,##__VA_ARGS__)
1、# 的作用转换成字符或字符串,用法如下:2、## 的作用拼接作用3、__VA_ARGS__ 作用可变参数宏如下是5.4版本kernel中soc.h的宏定义#define SND_SOC_DAILINK_REG1(name) SND_SOC_DAILINK_REG3(name##_cpus, name##_codecs, name##_platforms)#define SND_SOC_DAILINK_REG2(cpu, codec) SND_SOC_DAILINK_REG3(cpu,原创 2021-10-14 16:00:49 · 408 阅读 · 0 评论 -
利用栈实现的经典案例
1.用栈来实现任意进制进制转换//linklist.h#ifndef __LINKLIST_H__#define __LINKLIST_H__typedef struct linklistnode { struct linklistnode *next; int item;}LinkListNode; //数据节点 typed原创 2015-08-02 23:52:52 · 1018 阅读 · 0 评论 -
单向循环链表实例
游标:循环链表中的“当前”指针,这个指针称为游标,可以通过游标访问链表中的所有元素:增加:获取游标所指的数据元素重置游标移动至下一个元素直接指定删除的节点刚开始游标为空,当插入多个节点后,游标指向第一次插入的那个节点。实例如下://circlelist.h#ifndef __CIRCLELIST_H__#define __CIRCLELIST_H__typedef struct circl原创 2015-08-02 21:55:14 · 581 阅读 · 0 评论 -
单链表实例
链式存储结构:定义:为了标识每个数据元素于其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还要存储指示其直接后继的信息。单链表:每个节点中只包含一个指针域头节点:链表中的第一个节点。他包含了指向第一个数据元素的指针以及额外的信息;数据节点:链表中代表数据元素的节点,包含指向下一个节点的指针和数据元素。尾节点:链表中的最后一个节点,其下一个元素指针为空我的感悟: 下面的这个代码比较好用原创 2015-08-02 20:26:05 · 582 阅读 · 0 评论 -
线性表实例
线性表的本质:由0个或多个数据元素组成的集合数据元素之间是顺序的数据元素个数是有限的数据元素的类型必须是相同的专业的定义:线性表是具有相同类型的n(n>=0)个数据元素的有限序列(a0,a1,a2,...an)ai是表项,n是长度性质:a0为线性表中的第一个元素,只有一个后继an为线性表中的最后一个元素,只有一个前驱除了a0和an之外的其他元素ai,既有一个直接前驱,也有一个直接后继原创 2015-08-02 20:08:22 · 2603 阅读 · 0 评论 -
双链表实例
双链表:有时候以倒序扫描链表很方便。标准实现方法此时无能为力,然而解决解决方法却很简单,只要在数据结构上附加一个域,使他包含指向前一个指针即可。双链表的实例可以直接拿上一遍博客的单链表来修改。当你把单链表很熟的时候,会发现双链表其实也挺简单的。实例如下://dlinklist.h文件#ifndef __DLINKLIST_H__#define __DLINKLIST_H__typedef str原创 2015-08-02 20:52:35 · 615 阅读 · 0 评论 -
uplooking-C语言基础
早上:gcc1.预处理 把所有带#的行替换 生成.i文件 gcc -E hello.c > heello.i2.编译 生成.s文件 gcc -S hello.i3.汇编 生成.o文件 gcc -c hello.s4.链接 生成原创 2015-07-11 04:55:54 · 416 阅读 · 0 评论 -
队列的实现
队列:队列是一种特殊的线性表,只能在两端进行操作队头:取出数据的一端队尾: 插入数据的一端先进先出操作:创建销毁清空入队出队获取队头栈的实现://queue.h#ifndef __LINKQUEUE_H__#define __LINKQUEUE_H__typedef struct linkqueuenode{ struct linkqueuenode *next;原创 2015-08-02 23:13:23 · 288 阅读 · 0 评论 -
双向循环链表
双向链表实例:#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node { int item; struct node *next; struct node *prev;}node;//插入int list_insert(node **list){ int ret原创 2015-08-02 22:02:30 · 293 阅读 · 0 评论 -
树的实现
树:一种非线性的数据结构由n(n>=0)个节点组成的有限结合如果n=0,称为空树如果n>0,则: 有意个特殊的节点叫根节点(root),只有直接后继,没有直接前驱 除了根节点以外其他的节点划分成功m(m>=0)个互不相交的有限节点的度degree : 该节点拥有的子树的个数称之为该节点的度 度为0的节点称之为叶子节点 度不为0的节点称之为分支节点树的度定义为节原创 2015-08-03 00:41:19 · 430 阅读 · 0 评论 -
栈的实现
在数据结构中,栈是限制在表的一端进行插入和删除的线性表。在线性表中允许插入、删除的这一端称为栈顶,栈顶的当前位置是动态变化的,这样我们只能在栈顶对栈进行操作;不允许插入和删除的另一端称为栈底,栈底是固定不变得,当表中没有元素时称为空栈。这里我们直接用以前写的单链表来封装栈://linklist.h文件#ifndef __LINKLIST_H__#define __LINKLIST_H__type原创 2015-08-02 22:39:16 · 338 阅读 · 0 评论 -
有关string.h头文件的常用函数
一:strcat函数原型: char *strcat(char *dest, const char *src); 作用:连接两个字符串//strcat函数的实现#include <stdio.h>#include <string.h>int main( void ){ int i; int j; char buf[100]="mao maochong"; //buf数组原创 2015-07-26 21:50:56 · 885 阅读 · 0 评论 -
c语言常用代码积累
c语言已经上完了,自我感觉,要想学会c语言就要不停的敲,不停的敲代码,一个好的代码重复的敲,直到敲的和hello world一样熟悉,好多算法,好多解题思想我们想不到,但是,我们把前辈的东西敲会,敲熟,哪怕是敲的背下,最后掌握了这些解题的方法,能达到举一反三,那么这些方法就变成我们的东西了。//把数字123转换为字符串"123"#include <stdio.h>int main ( void )原创 2015-07-25 20:44:14 · 1227 阅读 · 0 评论 -
用两个栈实现队列
原理:由于栈是先进后出的,所以,让数据先进入一个栈中,然后依次从栈顶弹出,在依次进入另一个栈中,最后,从另一个栈中弹出,并输出,这样就变为先进先出了,实现了我们的队列实现代码//linklist.h#ifndef __LINKLIST_H__#define __LINKLIST_H__typedef struct linklistnode { struct linklistnode *n原创 2015-08-02 23:28:01 · 305 阅读 · 0 评论 -
goto语句的使用案例
案例一://用goto语句,实现1加到n的和#include <stdio.h>int main( void ){ int n; int i =1; int sum = 0; printf("n: "); scanf("%d",&n);label: sum += i++; if(i<=n) { goto label;原创 2015-07-25 22:05:58 · 3686 阅读 · 0 评论 -
sizeof和strlen使用技巧
1.介绍相同点: sizeof和strlen都可以计算字符串的长度。不同点: sizeof:是运算符 strlen:是函数2.举例**a.例如,定义如下:** char *info = "hello,si mida!!\n" 问: 给info字符串指针用malloc动态分配内存空间最好用sizeof还是strlen? 答案是最好用strlen。原创 2016-11-03 17:07:31 · 616 阅读 · 0 评论 -
布尔表达式的验证
列表内容布尔表达式。。。原创 2015-06-20 23:47:23 · 1271 阅读 · 0 评论 -
函数库
收集一些函数库。以便后用。。。 引用块内容输入输出函数库:stdio.h 数学函数库:math.h 字符函数库:ctype.h 字符串函数库:string.h 标准库函数库:sysem.h 图形处理函数库:graphics.h 动态内存管理函数库:alloc.h 目录操作函数库:dir.h 系统接口函数库:dos.h 输入输出函数库:io.原创 2015-06-29 16:39:08 · 442 阅读 · 0 评论 -
回溯法经典案例----N皇后
在一个N*N的棋盘上放置N个皇后,且使得每两个之间不能互相攻击,也就是使得每两个不在同一行,同一列和同一斜角线上。 下面N取8;//八皇后=====92种#include <stdio.h>#define N 8char board[N+2][N+2];typedef struct pos{ int ios; int jos;}Pos_t;Pos_t pos[3] = {原创 2015-07-23 23:47:56 · 1988 阅读 · 0 评论 -
string库(string.h)字符串查找函数
memchr 在指定内存里定位给定字符 strchr 在指定字符串里定位给定字符 strcspn 返回在字符串str1里找到字符串str2里的任意一个字符之前已查找的字符数量 strrchr 在字符串里定位给定字符最后一次出现的位置 strpbrk 在字符串str1里定位字符串str2里任意一个首次出现的字符 strspn 返回字符串str1从开始字符到第一个不在str2中的字符转载 2015-07-16 22:49:54 · 1321 阅读 · 0 评论 -
linux系统下struct大小的计算总结
Fire今天刚学了结构体,听的不是很明白,回来之后找了很多资料,然后自己亲手证明,总结了结构体大小计算的几个结论,如果有问题希望大家给予指点:linux系统 pragma pack 默认为4结构体对齐模数是结构体内部最大数据成员长度和pragma pack中的较小者例如: char a[4]; short c; double b;由于结构体中有double类型8个字节,比linu原创 2015-07-18 13:08:04 · 669 阅读 · 0 评论 -
ulimit -c unlimited
ulimint -a 用来显示当前的各种用户进程限制Linux对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况, 设置个Linux用户的最大进程数,一些需要设置为无限制:数据段长度: ulimit -d unlimited 最大内存大小: ulimit -m unlimited 堆栈大小: ulimit -s unlimited我们在用这个命令的时候转载 2015-07-18 10:23:18 · 8909 阅读 · 0 评论 -
清除键盘缓冲区
标准方法 fflush(stdin)另一种方法:scanf("%*[^\n]");读入不是换行符的字符串,不保存,返回scanf("%*c"); 读入一个字符,不保存,返回这俩句代码的意思是用扫描集将缓冲区中的字符全部读取来实现清除缓冲区的动作。详细解释:%*[^\n] 表示将逐个读取缓冲区中的'\n'字符之前的其它字符%后面的*表示将读取的这些字符丢弃遇到'\n'字符时原创 2015-07-18 18:12:59 · 2658 阅读 · 0 评论 -
gcc常用编译过程
Fire想要成为一个合格的linux驱动工程师,就必须先学会在linux系统下编程,必须精通c,所以Fire就朝这这方面走。学会了c的用法后,就要想着怎么去linux下编程c代码,在linux下,我们编写c语言用到的一个很重要的工具就是gcc。那么,就让Fire带大家走进gcc吧。 gcc的意思也只是 GNU C Compiler 而已。经过了这么多年的发展,gcc已经不仅仅能支持 C 语言;它现原创 2015-06-29 16:52:17 · 461 阅读 · 0 评论 -
文件操作函数的案例分析
1.fopen,fclose函数的使用的使用#include <stdio.h>#include <stdlib.h>#include <string.h>int main( void ){ FILE *fp = NULL; char name[32] = {}; double weight; if( (fp = fopen("info.txt","w")) ==原创 2015-07-24 23:29:30 · 427 阅读 · 0 评论 -
c语言文件操作详解
C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现。文件操作标准库函数有: 文件的打开操作 fopen 打开一个文件 文件的关闭操作 fclose 关闭一个文件 文件的读写操作 fgetc 从文件中读取一个字符 fputc 写一个字符到文件中去 fgets 从文件中读取一转载 2015-07-24 21:56:07 · 552 阅读 · 0 评论 -
c语言while,switch语句常用代码
案例1://大小写字符的转换#include <stdio.h>int main(){ char ch; printf("character >"); scanf(" %c",&ch); switch(ch) { case 'a' ... 'z': printf("你输入的是%c,=>%c\n",ch,ch-32);原创 2015-07-25 22:47:40 · 1271 阅读 · 0 评论 -
采用dlopen、dlsym、dlclose加载动态链接库【总结】
1、前言 为了使程序方便扩展,具备通用性,可以采用插件形式。采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件。linux提供了加载和处理动态链接库的系统调用,非常方便。本文先从使用上进行总结,涉及到基本的操作方法,关于动态链接库的本质及如何加载进来,需要进一步学习,后续继续补充。如何将程序设计为插件形式,挖掘出主题和业务之间的关系,需要进一步去学习。转载 2015-08-07 14:57:42 · 515 阅读 · 0 评论