
C语言
胡小哲
捧着看不懂的故事,道着懵懂的错对。
展开
-
C->C++注释转换的简单实现
要想实现C->C++的注释转换,首先要画出注释转换的状态图: 1.如果碰到的是//,则直接进入C++注释转换中,可以直接将该行字符全部读取并输入。 2.如果碰到的是/,则代表着C注释的开始,这里需要对/是否有字符,以及*/后面是否还接有下一个注释的开始进行判断。 3.如果碰到EOF状态,便可以直接退出。 程序实现: CommentConvert.h#ifndef __FILE__COM原创 2017-07-29 22:32:06 · 416 阅读 · 0 评论 -
信号量 --- 哲学家就餐
比如我们有一张桌子,上面坐着五位哲学家 现在他们每个人都有一双筷子,并且都拥有了自己的编号。 桌子上摆满了菜,哲学家们现在开始只做两件事情,吃饭,或者思考。 当他们吃饭的时候就停止思考 ,当他们思考的时候就停止吃饭。 我们假设他们都会用筷子,而当他们要吃饭的时候都必须拿两根筷子。 而且每个哲学家并不互相交流,此时就会出现一个很严重的问题。 如果这些哲学家在准备吃饭的时候,先拿起...原创 2018-04-23 19:34:30 · 1072 阅读 · 0 评论 -
Linux 异步信号处理机制
信号概述信号是软件中断。 信号是linux系统下的异步处理机制。 例如:在终端按写某些按键时,会通过信号机制停止一个程序。首先,每个信号都有一个名字,都以SIG开头,通过 kill -l 可以查看 其中有很多常见信号 SIGINT :当我们在终端按下 CTRL+C 时就会产生一个 SIGINT 信号。 SIGQUIT :CTRL+\ SIGTSTP :CTRL+Z...原创 2018-04-19 15:29:45 · 1127 阅读 · 0 评论 -
线程同步互斥机制
线程同步互斥机制线程互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。例如 : 出现这种情况是因为操作系统在内核中对线程的调用的来回切换。代码可以并发的切换到其他的线程。互斥锁互斥锁以排他方式防止共享数据被并发访问。 互斥锁是一个二元变量,只有两种状态 开锁 和 上锁。 将某个共享资源与某个...原创 2018-04-23 17:20:35 · 2460 阅读 · 0 评论 -
malloc 底层实现
动态存储器分配器malloc 又称显示动态存储器分配器,动态存储器分配器维护着一个进程的虚拟存储器区域,称为堆。 我们假设堆紧接着未初始化.bss段后开始,并向上生长,对于每个进程,由内核维护着堆顶(brk —- break) 分配器将堆视为一组不同大小的块,每个块则是一个连续的虚拟存储器片,要么是已分配的,要么是空闲的。 已分配的块供应用程序使用,空闲块则可以用来分配。 已分配的...原创 2018-03-13 01:19:48 · 8216 阅读 · 0 评论 -
日历界面实现(一次输出三个月)
直接用循环写 太蠢了 不解释了。 在这里我以 1995年1月1日为标准 所以暂时只能求1995年1月1日以后的年份日历。bool Getyear(int year){ if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) return true; return false;}int GetAll原创 2017-11-18 17:05:42 · 1995 阅读 · 4 评论 -
结构体和函数指针实现加减乘除
构思: 创建结构体,结构体的成员中有一个成员为函数指针,赋值后可指向各个算法的地址; 当输入add 1 2时,指针数组分别指向add,1和2; 随后进行字符串比较,判断进入哪一个算法; 实现:char optr;int(*pf)(int, int) = NULL; //函数指针int add(int a, int b) { return a + b; }int sub(int原创 2017-07-25 22:28:16 · 1912 阅读 · 0 评论 -
模拟实现atoi函数
函数功能: atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中。atoi( ) 函数会扫描参数 ptr字符串,跳过前面的空白字符(例如空格,tab缩进等)。 可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始做转换,而在遇到非数字或字符串结束时(‘\0’)才结束转换,并将结果返回(返回转换后的整数值); 模拟实原创 2017-07-25 22:15:21 · 353 阅读 · 0 评论 -
链表操作(链表面试题)
这次需要实现的操作有 list.h#ifndef __LIST_H__#define __LIST_H__#include <assert.h>#include <stdio.h>#include <stdlib.h>typedef int DataType;typedef struct Node{ DataType data; struct Node* next;原创 2017-08-01 23:32:33 · 512 阅读 · 0 评论 -
实现链表基本操作(简单操作)
要实现链表的基本操作,首先要了解链表的存储方式。 在链表中,首先要有一个head指针,指向这个链表的第一个元素,head指针用来维护,读取这个链表。链表的末尾指向NULL,用来表示链表的结束位置。 链表的简单操作有: LinkList.h#ifndef __LINKLIST_H__#define __LINKLIST_H__#include <assert.h>#include <s原创 2017-08-01 21:40:24 · 564 阅读 · 1 评论 -
C语言结构体,位段
1.结构的定义 在实际情况中,数据经常以成组的形式存在。如果这些值的类型各不相同,他们无法同时存储于同一个数组中,在C中,可以使用结构把不同类型的值存储在一起,所以结构也是一些值的集合,这些值称为它的成员,但是这些成员的类型可以不同。 拓展: “结构”是一种构造数据类型,也叫做用户自定义数据类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造类型。 结构即是一原创 2017-07-09 01:33:18 · 1889 阅读 · 0 评论 -
Linux 多线程
Linux 多线程线程概念在一个程序里的一个执行路线就叫做线程。 每个进程都至少有一个线程。进程和线程进程是资源分配的基本单位。 线程是调度和执行的基本单位。 线程共享进程的数据:代码段,数据段,bss段和堆段,文件描述符,打开的库,mmap映射的文件以及共享内存空间。 线程也有自己的私有数据:线程 id, PCB,寄存器,栈,errno,信号屏蔽字,调度优先级。 ...原创 2018-04-21 12:40:34 · 259 阅读 · 0 评论