c语言练习册
这里是c语言练习笔记,只做记录和分享作用,不做其他,如有侵权请联系我
_小白鱼儿_
丰富的物联网产品开发经验,嵌入式智能设备开发,桌面QT应用开发
展开
-
(闲来无事)栈的实现
对栈的理解记住“先进后出”就可以了,什么意思呢?就是向桶里放积木只能拿出最上层的积木,然后一层一层的拿出这样理解的话就简单了,只用一个节点一直指向栈的最上层的节点就可以了。1.首先想构造的数据结构是什么样子的?需要存储的数据有哪些?存储的数据可以根据自己的需求去添加, 在我设计的数据中只有一个那就是int 类型的data数据如下所示:typedef struct STACKNODE原创 2017-09-25 11:00:01 · 313 阅读 · 0 评论 -
(闲来无事)C语言的链表实现
很久没有自己写链表了感觉手生了,最近时间比较多就写写吧,作为自己以后的查找资料。第一、是对printf函数的替换,因为在项目中通常有debug版本,替换了printf会适用于这种版本,替换方法很简单#define log_error(fmt,arg...) printf(fmt,##arg)第二、是对结构体的定义,个人习惯,我喜欢定义节点,然后定义一个头结点typede原创 2017-09-25 10:43:33 · 252 阅读 · 0 评论 -
三个正整数的和是一个正整数 ,有多少种组合方法
/*** 三个正整数的和是一个正整数 有多少种组合方法 我这里三个数用的是 95 60 40 和是1000 * * 下面是两种方法*/#include <stdio.h>#define NUM1 95#define NUM2 60#define NUM3 40#define SUM 1000int method(int sum,int num1,i...原创 2018-06-12 10:54:30 · 1584 阅读 · 0 评论 -
记录一种切割字符串的方法
这里距离切割年月日#include <string.h>#include <stdio.h>#include <stdlib.h>typedef struct time_all{ char year[8]; char month[8]; char day[8]; char hour[8]; char minute[8]; char seco...原创 2019-09-10 16:55:40 · 112 阅读 · 0 评论 -
过滤无符号的形参
#include<stdio.h>#include<string.h>int intOrUnsigned(unsigned int unIap){ int i = 0; i = i-unIap; if(i>0){ printf("unsigned : %u\n",unIap); } else{ ...原创 2018-07-28 11:13:43 · 126 阅读 · 0 评论 -
怎么判断是几元运算符?
昨天一个小同志给我说还要记着几元运算符,那么多的运算符记忆起来很麻烦我一脸惊讶,几元运算符不就是修饰几个元素就行了啊比如说一元运算符 : ++ – * & 这些都是修饰的一个元素 比如说二元运算符 :+ - = * / 这些都是修饰的两个元素原创 2018-01-29 08:57:40 · 2252 阅读 · 0 评论 -
《实际项目中log的控制方法》
在项目调试中需要对log输出方便工程师进行调试,在产出的时候把log关闭用下面的开关宏进行控制下面的只需要把BAIYU这个宏打开就可以进行log打印,关闭就可以吧log关闭掉#include #define BAIYU 0#define log_print(format, ...) \ do{\ if(BAIYU){ \原创 2017-12-27 18:38:35 · 285 阅读 · 0 评论 -
《可以把FILE转为int的API》(fileno())
其实这个大多数是没有必要的,暂时只是偶尔使用这个函数int fileno( FILE *stream );它可以把FILE类型的流转化为int类型的文件描述符,然后在后续的逻辑中都使用fd进行操作。int main(int argc,char *argv[]){ FILE *output; int ttyout,std_out; output = fopen原创 2017-12-14 16:16:48 · 671 阅读 · 0 评论 -
《由浅到深使用回调函数 3》(有参回调函数)
在《由浅到深的使用回调函数 1》中学习了无参的回调函数,现在学习有参回调函数,其实和无参的回调函数是一样的,现在加深了对回调函数的理解,以后在项目中使用就不会慌张了。首先头文件:#include 然后给函数指针一个别名:callBackFunctypedef void (*callBackFunc)(int,char *);接着写带参数回调函数void aFu原创 2017-10-19 11:23:09 · 293 阅读 · 0 评论 -
《由浅到深使用回调函数 2》(快速排序)
上一节中讲了快速排序,这一节回忆一下快速排序吧!理解标准库中快速排序怎么用的头文件:#include #include #include 标准快排API:void qsort(void *base, size_t nmemb, size_t size,int (*compar)(const void *, const void *));base参数是需要排序的原创 2017-10-19 10:15:22 · 183 阅读 · 0 评论 -
《由浅到深的使用回调函数 1》
最近看http协议,有许多的回调函数,让我想起了以前做快速排序void qsort(void a,void b,int (fun)(const void *p,const void *q))的时候编写了快排序的第三个参数让我写了很久但是最后依然没有理解,现在对回调函数做一个总结,现在从无参回调函数开始理解。首先头文件:#include 然后给函数指针写个好听的名字:ca原创 2017-10-18 18:46:46 · 264 阅读 · 0 评论 -
《从gpio监控按键事件小结》
今天做了一个io监测按键事件的小程序,但是在调试过程出现了下面的问题:1.按下以后常亮2.按下以后抬起会出现亮的现象 int iFlag = 0; gpio_enable(GPIO_1,1); pin_mode(GPIO_1,0); GPIO_write (GPIO_5,GPIO_HIGH); //首先上拉 for(;;){原创 2017-10-14 18:26:00 · 950 阅读 · 0 评论 -
《重视基础之无名管道》
白鱼儿的迷之理解:干事情呢,首先打起大的框架,然后从大到小,慢慢的把细节实现。首先明白无名管道是一种特殊的文件,所以许多对文件操作的函数都可以用(read write)然后这个文件呢特点就是单双工的,它是父系社会只能爸爸和孩子用函数:int pipe(int file[2]) file[0]是读 file[1]是写 pid_t fork(void) 返回值是0原创 2017-10-12 16:15:10 · 223 阅读 · 0 评论 -
(闲来无事)getopt函数的使用
在项目中遇到了getopt函数,于是在百度上查找,觉得理解的有些不舒服,所以自己写了代码验证一下自己的想法。getopt函数的原型为int getopt(int argc,char const argv[ ],const char optstring);argc和argv是我们的老朋友:main函数的两个参数。optstring就是这个函数的重点,在下面的例子中a后面是一个原创 2017-09-25 11:35:21 · 226 阅读 · 0 评论 -
记录几种信号处理
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <signal.h>static void singal_ctrl_c(){ printf("recv message ctrl+c\n"); return ;}static void singal_...原创 2019-04-25 11:36:13 · 194 阅读 · 0 评论 -
十进制和十六进制转化
#define changeHexToInt(hex) ( ( ((hex)&gt;&gt;4) *10 ) + ((hex)%16) )原创 2019-03-13 17:39:10 · 319 阅读 · 0 评论 -
查看写了多少行代码
shell命令查看写了多少源文件wc -l `find -name *.c`查看本文件夹下所有文件多少行wc -l `find -name '*.*' `原创 2018-10-23 15:04:22 · 3168 阅读 · 0 评论 -
《三分钟理解大小端》
无论笔试还是面试都有一定几率问怎么判断大小端,那么你就很自豪的回答,大端就是数据高字节放在低地址上,小端就是数据低字节放在低地址上。好了您回答了这个恭喜下面让你代码实现一下,这个时候很多只是死记硬背的缺陷就会暴露出来。其实代码的实现很多方法都是可以的,下面举例最简单的一种,就是初始化一个16进制的类型的数据,然后把它放在一个char类型的数组中,由于十六进制的数据一位代表四个bit位cha原创 2017-11-11 14:01:45 · 303 阅读 · 0 评论 -
ascii码转utf8源码
char *url_encode(char const *s, int len, int *new_length){ register unsigned char c; unsigned char *to, *start; unsigned char const *from, *end; from = (unsigned char *)s; end ...原创 2019-10-16 16:10:44 · 1086 阅读 · 2 评论 -
socket通信注意事项
此博客是转载的,转载地址https://blog.csdn.net/waisock2017/article/details/78448427(1) 对于可变包长,必须定义包头,并在包头中定义包的总长度 由于socket是字节流,就像流水一样,对于传输多个包的socket数据流来说,从中间无法得知一个包的起始位置,从中间位置观察数据包的特征也是一个不靠谱的做法。因此,只能从包的第一个字节起,一个...转载 2018-12-17 11:24:43 · 739 阅读 · 0 评论 -
多线程的生产者消费者模型,最简单的demo
所用的知识点和上章一样:https://blog.csdn.net/qq_40062917/article/details/80833194理解生产者消费者的概念就好了,代码如下#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt; #include &lt;errno.h&原创 2018-06-27 20:10:44 · 590 阅读 · 0 评论 -
多线程的互斥锁和条件变量
线程间的互斥的同步一直是一个很重要的地方,在这里做个总结所用的接口创建线程的接口 返回0是成功,其他是失败int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); ...原创 2018-06-27 18:10:23 · 227 阅读 · 0 评论 -
《c语言变长结构体实用》
零长度和变量长度数组GNU C 允许使用零长度数组,在定义变长对象的头结构时,这个特性在一些数据进行网络通信时非常有用。 但是零长度的数组编译环境不同会出问题,所以用下面的格式。typedef struct package{ int m; char ch[];}PDU;并没有为 data[] 数组分配内存,因此 ,sizeof(PDU)=sizeof(int)值为4原创 2017-12-30 17:30:39 · 609 阅读 · 0 评论 -
《socket编程由笑嘻嘻到绝望》(epoll简单高并发服务器模型)
在网络编程中相对使用select poll 机制 ,epoll具有着很大的优势,具体优势很多文章都有讲,在这里就不再赘述了。在下面的例子中服务直接使用命令make就可以编译,运行命令demo:./epoll_server 127.0.0.1 6666测试的客户端运行命令demo:gcc -o client client.c./client 127.0.0.1 6666原创 2017-11-10 15:29:43 · 330 阅读 · 0 评论 -
《socket编程由笑嘻嘻到绝望》(服务器和客户端)
不管是无连接的或者是面相连接,两者服务端和客户端的模型是大致都是下面的几种模型。面相连接服务端: socket() bind() listen() accept() write()/read()/send()/recv() close() 面相连接客户端: socket() connect() 读写操作...原创 2017-10-24 12:50:21 · 444 阅读 · 0 评论