- 博客(50)
- 收藏
- 关注
原创 用tcp协议创建一个服务器
#include #include #include #include #include #include #define PORT 9999int main(){ //1、创建socket int listen_socket = socket(AF_INET, SOCK_STREAM, 0); if (listen_socket == -1) { perro
2017-08-15 20:21:47
423
原创 单链表知识汇总
1.从尾到头打印单链表void RPrintList(pList plist);//从尾到头打印链表(不改变链表)11从尾到头打印单链表,而不能改变链表本身,可以用递归很好的实现void RPrintList(pList plist){ if (plist == NULL) { return; } else if (plist->n
2017-08-14 19:56:27
410
原创 售票系统
#include #include #include #include #include #include typedef struct _shm{ int flag; int ticket;}SHM;void sellTicket(SHM* pshm){ while (1) { int time = rand() % 10 + 1; usleep(t
2017-08-14 18:46:20
467
原创 典型例题
float a = 1.0f; cout cout cout cout 输出如下:1001FFBC01065353216falsefloat b = 0.0f; cout 输出如下:0001FFBB40true因为float 类型的1和0以整数类型存放存放内存数据是不一样的!float 0
2017-08-11 19:12:53
249
原创 文件操作二
#include #define SIZE 1024int main(){ FILE *fp = fopen("1.ppt", "ab+");if (fp == NULL){perror ("fopen");return -1;}FILE *fp1 = fopen("2.ppt", "ab+");if (fp1 == NULL){
2017-08-09 20:03:55
268
原创 linux中的文件操作代码一
fopen():#include int main(){ FILE *fp = fopen ("abc","ab+");//ab+加入b字符告诉函数库打开的文件为二进制文件而非纯文本文件! if (fp == NULL) { perror ("fopen"); return -1; }
2017-08-09 19:39:47
346
原创 程序:计算1!+2!+3!+4!+.....+n!
#include int main(){ int i; int sum = 0; int tmp = 1; for (i = 0; i { tmp = tmp * i; sum = sum + tmp; } printf ("%d\n",sum); ret
2017-07-21 09:48:41
3833
原创 关于字符串长度、字符串逆序的相关程序
#include 求字符串的长度:int main(){ char str[100] = "hello world!"; int len = 0; int i; for (i = 0; i { if (str[i] != '\0') // 只要字符串str[i] != '\0' ,len就+1;
2017-07-20 20:50:22
300
原创 数组逆序
第一种方法#include #define N 10int main (){ int a[N] = {0,1,2,3,4,5,6,7,8,9}; int i; int tmp; for ( i = 0; i { tmp = a[i]; a[i] = a[N - i - 1]; // N -
2017-07-20 20:03:51
502
原创 编写一个可以测出电脑是大端模式还是小端模式
#include // 小端返回真 (1) 大端返回假 (0)int isLittleEndian(){ union { int a; char ch; } a; a.a = 1; //二进制=:0000 0001 return (a.ch == 1)}i
2017-07-20 19:29:27
552
原创 十进制转换各个进制(< 10)
#include #define BASE X // (X 代表想转换的进制)// 十进制与多进制的转换int main (){ int a; printf ("请输入一个数字:\n"); scanf ("%d",&a); int s[10] = {0}; int i = 0; while(a ) {
2017-07-19 11:31:48
317
原创 斐波那契函数的实现
#include // 斐波那契函数 // X 0 1 2 3 4 5 6 // Y 0 1 1 2 3 5 8 Y(5) = Y(3) + Y(4)/* int func(int n){ if ( n == 1) { return 1; } int res = n * func(n -1); ret
2017-07-19 11:02:06
459
转载 关于字节对齐的理解
结构体对齐 有的时候,在脑海中停顿了很久的“显而易见”的东西,其实根本上就是错误的。就拿下面的问题来看: struct T { char ch; int i ; }; 使用sizeof(T),将得到什么样的答案呢?要是以前,想都不用想,在32位机中,int是4个字节,char是1个字节,所以T一共
2017-07-10 19:50:44
600
转载 只在堆上或是栈上分配对象的方法:
那么如何限制类对象只能在堆或者栈上建立呢?下面分别进行讨论。1、只能在堆上分配类对象,就是不能静态建立类对象,即不能直接调用类的构造函数。容易想到将构造函数设为私有。在构造函数私有之后,无法在类外部调用构造函数来构造类对象,只能使用new运算符来建立对象。然而,前面已经说过,new运算符的执行过程分为两步,C++提供new运算符的重载,其实是只允许重载operator new()函
2017-06-22 15:59:02
681
原创 TCP循环服务器 代码tcpser
#include #include #include #include #include #include #include #include #define PORT 1234int main(){int sockfd, newfd;struct sockaddr_in serv_addr;struct sockad
2016-12-26 22:21:57
480
原创 tcp_client
#include #include #include #include #include #include #include #include #define portnumber 3333int main(int argc, char *argv[]) { int sockfd; char buffer[1024];
2016-12-26 22:20:41
417
转载 合并两个链表成一个升序链表
LinkList mergeLinkedlist(LinkList &L1,LinkList &L2) { LinkList a=NULL; LinkList b=NULL; LinkList c=NULL; LinkList L; GreatList(L);
2016-12-13 22:12:15
645
原创 退出 、 等待
wait作用:等待子进程中断或者是结束原型:pid_t wait (int * status)说明:暂停目前进程直到信号来或是进程结束。若调用wait时已经结束会立即返回。返回值:成功返回子进程pid号,出错 -1;头文件:#include #include wait pid功能:等待子进程结束或是中断;原型:p
2016-12-12 22:28:10
323
原创 进程的创建、运行、退出
创建: fork: 作用:创建一个进程原型:pid_t、fork(void)返回值: 出错=0 子进程>0 父进程子进程的数据堆栈空间都是从父进程拷贝过来的。vfork作用:建立一个新的进程原型:pid_t vfork返回值: 出错=0子进程>父进程头文件:#include fork 与 v
2016-12-11 22:45:09
379
转载 单链表倒序
需要将单链表倒序,并输出新的链表核心代码Node *next = root->next;root->next = new_root;new_root = root;root = next;[cpp] view plain copy print?#include typedef
2016-12-10 21:59:55
316
转载 大话数据结构8之栈和队列2
栈的应用--四则运算表达式求值 后缀(逆波兰)表示法定义:不需要括号的后缀表达式。例:9+(3-1)*3+10/2,后缀表达式为9 3 1 - 3 * + 10 2 / +,所有的符号都是在要运算的数字后面出现 后缀表达式计算结果:还是上例 初始化一个空栈,此栈用于对要运算的数字进出使用; 后缀表达式中的前三个都是数字,所以把运算符前面的数值依次进栈:9、3
2016-11-29 22:44:35
245
原创 链表
单链表的插入:假设存储元素e的结点为s,要实现p、p->next和s直间逻辑关系的变化,只需要将s插入到p和p->next之间即可。也就是说,让p的后继结点称为s的后继结点,s变成p的后继结点,如下图:这个操作的代码只需要两行:[cpp] view plain copy s->next = p->next; p->nex
2016-11-28 22:46:28
286
原创 比较两个分数的大小
比较两个分数的大小,主要的思想是输入的两个分数当分母不相同时,先通分,换算成相同的分母后,然后在相互比较分子的大小,如果分母相同时,直接比较两个分子的大小实例代码:[html] view plain copy /****************************************************
2016-11-26 22:07:19
728
转载 链表
#include "stdafx.h"#include "stdio.h"#include #include "string.h" typedef int elemType ; /************************************************************************//* 以下是关于线性表链接存储(单
2016-11-24 22:11:28
288
转载 typedef与define的区别
Typedef和define都可以用来给对象取一个别名,但是两者却有着很大不同。1. 首先,二者执行时间不同关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能。Define则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。 #define用法例子:#define f(
2016-11-23 22:02:06
252
转载 嵌入式调试器GDB简单功能介绍
GNU开发了GDB调试器,虽然GDB没有图形调试界面,但对于从事嵌入式Linux应用开发的人员还是有必要知道GDB的使用方法的。一般来说,GDB主要帮助你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。4、你可
2016-11-22 22:17:26
342
原创 C语言:关键字
1、static(保存在全局数据区)1)、延长局部变量生命周期:static 只执行一次。2)、修饰全局变量,只能在本文件中使用,其他文件不能访问。3)、修饰函数:一个函数被static修饰,只能在本文件中调用,不能在其他文件中使用。2、extern:(声明变量)外部声明作用:声明这个变量在其他文件想在一个文件中使用另一个文件中变量?在当前 .c 中外部声明。3、
2016-11-21 21:41:51
260
原创 嵌入式课堂笔记
1、通过函数名找到函数的入口地址。2、给形参分配空间。3、传值:把实参变量对应的内存空间的值,传递给形参变量的对应空间。{当只读(只使用不修改)实参变量的值时,传实参变量变量名当写(即使用又修改)实参变量对应内存空间的地址}4、执行函数体语句。5、函数返回并释放内存空间;6、函数接口:函数原型、函数使用文档、函数接口的重要性。7、共用体的特点:共同使用一段空间容易产
2016-11-20 22:22:09
334
转载 scanf,gets,getchar,fgets中的一些细节
1.getchar int getchar ( void ); Get character from stdin Returns the next character from the standard input (stdin). It is equivalent to calling getc with stdin as ar
2016-11-19 22:09:05
304
原创 typedef与#define
typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间#define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了,但也因此难以发现潜在的错误及其它代码维护问题. 区别的话,#是宏,处理的时候位于
2016-11-18 21:59:29
218
原创 数组与指针
一、指针1、对应的内存的空间: num ++;2、指针的步长: 整形:4个 字符1个;3、(*P)++:找到p变量里保存的地址对应的内存空间:4、指向内存空间:p++:对p对应的内存空间的值+1;(*p)++:对p指向的内存空间的值+1;p对应的指向空间地址.*p对应指向空间的值:num == *p;&num == p;
2016-11-17 22:13:41
214
转载 malloc,realloc,calloc的介绍与区别
一.首先我们先大体介绍下 malloc ralloc calloc1.malloc void* malloc(size_t size );分配size个字节的未初始化的存储空间。如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定
2016-11-15 22:24:46
316
转载 uC/OS - 2操作系统的简单概念
uC/OS - 2操作系统的简单概念实时系统:指逻辑和时序出现偏差将会引起严重后果的系统。前台程序:一般指死循环中的程序。后台程序:中断程序。临界代码段:代码的临界段也称为临界区,指处理时补课分割的代码。任务切换:1.保存任务1的工作状态。2.载入任务2的工作状态。3.跳转到任务2的地址空间工作。内核:多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,
2016-11-13 22:55:10
689
原创 动态库 静态库
一、动态库:gcc -shared - fPIC -o libadd.so add.c sub.c mul.c div.cgcc main.c二、静态库:gcc -c add.c sub.c mul.c div.car rcs libadd.a add.ogcc main .c -ladd -L -o main./main
2016-11-10 21:58:43
233
原创 课堂笔记
一、什么是声明?什么是定义?它们有什么区别?什么是定义:所谓的定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它取上名字,这个名字就是我们经常所说的变量名或对象名。但是注意,这个名字一旦和这块内存匹配起来(可以想象是这个名字嫁给了这块空间),它们就同生共死、终身不离不弃,并且这块内存的位置也不能被改变。一个变量或对象 在一定的区域内(如函数、全局等)只能被定义一次,如果定义多
2016-11-09 22:00:12
248
转载 C语言中函数strlen等的实现
#include //#include #define MAX_SIZE 1024/*把值定义在外面容易修改*/int my_strlen(char *str){ int len = 0; while(*str != '\0') { len++;str++; } return len;}ch
2016-11-08 22:07:55
282
原创 嵌入式课堂笔记
一、变量与常量;1、变量三大特点: (1)、变量的数据类型:主要说明变量占用内存空间大小。(2)、变量的作用域:变量有效性的范围,即变量的使用范围。(3)、储存类型:变量内存的存储方式不同地存储方式影响变量在内存周期。2、scanf与gets的区别:scanf不能捕获一个句子。gets可以捕获句子。3、算术运算符:+; -; * ; / ; %; ++ ;--;
2016-11-07 21:25:57
288
原创 嵌入式课堂笔记
一:数据类型1、strlen:测量一个字符串有多少字符; 不统计\0;printf ("strlen (str)=%d\n",strlen (src));2、整数原码=补码 负数补码=原码取反+13、bit; 字节=(8bit); 半字=(2个字节=16bit);字=4个字节=32bit4、sizeof (num);测量一个变量字节长度(所占空间大小)5、特
2016-11-05 22:35:36
386
转载 linux 课堂作业
linux下文件拷贝代码#include #include #include #include #include #include #define BUFF_SIZE 1024int main(int argc,char *argv[]){ int from_fp; int to_fp; char b
2016-11-02 21:55:51
246
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人