
学习C
三杯白开水
这个作者很懒,什么都没留下…
展开
-
排序
#include <stdio.h>void my_print(int *a,int len){ int i; for(i = 0;i<len;i++) { printf("%-4d",a[i]); } printf("\n");}void my_swap(int *a,int i,int j){ int tmp = a[i]; a[i] = a[j...原创 2019-03-07 11:34:40 · 173 阅读 · 0 评论 -
Linux C学习第二十二天
排序:1.冒泡排序#include <stdio.h>void my_print(int *a,int len){ int i; for(i = 0;i<len;i++) { printf("%-4d",a[i]); } printf("\n");}void my_swap(int *a,int i,int j){ int tmp = a[i];...原创 2018-12-18 18:35:46 · 136 阅读 · 0 评论 -
UDP服务器
#include <stdio.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <arpa/inet.h>#include <string.h>#include <unistd.h>#include &...原创 2019-01-03 19:32:23 · 387 阅读 · 0 评论 -
Linux C第二十四天
进程:进程是一个具有一定独立功能的程序的一次运行活动进程是一个程序正在执行的实例。每个这样的实例都有自己的地址空间和执行状态。进程ID:每个进程都有一个ID(ID是一个正整数),唯一标识了系统中的这个进程。每个进程都有一个创建它的进程,叫父进程(Parent Process)进程ID(PID):标识进程的唯一数字父进程ID(PPID)启动进程的用户ID(UID)进程的生命周期:...原创 2018-12-24 17:18:19 · 125 阅读 · 1 评论 -
进程知识点整理2
exec用被执行的程序替换调用它的程序区别:fork 创建一个新的进程,产生一个新的PIDexec 启动一个新程序,替换原有的进程,因此进程的PID不会改变。execl:#include <unistd.h>int execl(const char * path, const char* arg1,…)参数:path : 被执行程序名(含完整路径)。arg1...原创 2018-12-25 20:41:59 · 179 阅读 · 0 评论 -
C++动态内存分配
C中使用malloc 和free ----->库函数,不是语法的一部分C++中使用new 和delete ----->是运算符(+,-,*….)是语法的一部分strlen---->函数 :计算字符串长度sizeof----->运算符 :计算变量类型所占空间的大小。#include <iostream>#include <stdlib.h>...原创 2019-01-10 18:16:51 · 135 阅读 · 0 评论 -
C++构造函数,析构函数
构造函数:在创建对象时系统自动调用的函数===>初始化对象如果类中一个构造函数都没有,系统会自动添加一个无参构造函数特点:1.构造函数的函数与类名相同。2.无返回值3.构造函数可以重载(1)如果某个构造函数被调用了,则一定是有一个新对象创建(2)如果创建一个新的对象,必定会调用某个构造函数调用方法1.使用括号进行赋值Test t(10);2.等号法Test t1 = T...原创 2019-01-11 19:37:20 · 127 阅读 · 0 评论 -
TCP服务器与客户端的创建
基于TCP-服务器1.创建一个socket,用函数socket()2.绑定IP地址、端口等信息到socket上,用函数bind()3.设置允许的最大连接数,用函数listen()4.接收客户端上来的连接,用函数accept()5.收发数据,用函数send()和recv(),或者read()和write()6.关闭网络连接#include <stdio.h>#includ...原创 2019-01-02 19:09:33 · 297 阅读 · 0 评论 -
C++栈
首先看一下原c++栈的方法的基本用法:push(): 向栈内压入一个成员;pop(): 从栈顶弹出一个成员;empty(): 如果栈为空返回true,否则返回false;top(): 返回栈顶,但不删除成员;size(): 返回栈内元素的大小#include<iostream>#include<stack>using namespace std;int ...原创 2019-01-17 16:06:15 · 1242 阅读 · 0 评论 -
线程1
线程概述:线程的使用:原创 2018-12-28 19:27:19 · 107 阅读 · 0 评论 -
Linux C学习第二十天
栈和队列:栈:后进先出添加元素:压栈删除元素:出栈栈的实现:1.顺序栈。2.链式栈栈最顶端的元素叫栈顶元素。顺序栈:头文件:#ifndef _STACK_H_#define _STACK_H_#define SIZE 10typedef enum {FALSE, TRUE} BOOL;typedef int Data;typedef struct stack {...原创 2018-12-11 20:07:50 · 142 阅读 · 0 评论 -
Linux C 学习第二十三天
文件编程:所有的操作系统都提供多种服务的入口点,程序由此向内核请求服务。这些可直接进入内核的入口点被称为系统调用。“文件”这个名词不陌生,什么是文件?系统资源(内存、硬盘、一般设备、进程间通信的通道等)的一个抽象对系统资源进行访问的一个通用接口。采用这种“文件”的方式有什么好处?对资源提供通用的操作接口,可以极大地简化系统编程接口的设计。既然文件是一个通用的接口,由于系统资源多种多样...原创 2018-12-20 18:45:32 · 178 阅读 · 0 评论 -
进程间通信1
管道通信:共享内存:原创 2018-12-26 18:24:30 · 154 阅读 · 1 评论 -
C语言深度剖析-内存管理和函数
第五章:内存管理1.栈,堆和静态区堆:由malloc系列函数或new操作符分配的内存。其生命周期由free或delete决定。在没有释放之前一直存在,直到程序结束。其特点是使用灵活,空间比较大,但容易出错。栈: 保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但是空间大小有限(64位大概为8M)。静态区: 保存自动全局变量和stat...原创 2018-12-16 16:29:52 · 165 阅读 · 0 评论 -
Linux C学习第十九天
{ sqlite3 *db; int ret = sqlite3_open("student.db",&db); if (ret != SQLITE_OK) { printf ("数据库打开失败\n"); return -1; } char...原创 2019-01-07 14:24:41 · 148 阅读 · 0 评论 -
C++对象初始化列表
对象初始列表:构造函数后加 : 后面接上要初始化的成员,各个成员之间以逗号进行区分。1.对象初始化列表的执行顺序要优先于构造函数。2.对象初始化顺序和对象在初始化列表中所在位置无关,和在类中的声明顺序有关。#include using namespace std;class Test2{public:Test2():m_a(10),m_b(99){cout<<“a...原创 2019-01-12 19:16:03 · 857 阅读 · 0 评论 -
C++ 第二天
constC++中,const修饰的是一个常量1.const常量正常情况下内存不会为其分配空间。2.使用的时候去符号表中取值。3.如果对const常量进行取地址操作,则编译器会为其分配一块空间,但他本身并不会使用。4.建议用const替换宏常量。const和define的区别(1)define在预处理时处理,做的工作是完全替换,在程序中有多个备份。const是编译的时候处理,会进行...原创 2019-01-09 18:27:05 · 150 阅读 · 0 评论 -
C++继承
一、继承一个类从另一个类获取成员函数和成员变量的过程-------------->代码复用语法:继承: class 新类:访问控制 要继承的类;#include <iostream>#include <cstring>using namespace std;class Animal{public: void sleep() { ...原创 2019-01-15 18:38:37 · 109 阅读 · 0 评论 -
丑数
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。根据丑数的定义,丑数应该是另一个丑数乘以2、3、5的结果(1除外)。因此我们可以创建一个数组,里面的数字是排好序的丑数,每一个丑数都是前面的丑数乘以2、3或者5得到的。这种思路的关键在于怎样确保数组里面的丑数是排好...原创 2019-01-25 20:36:16 · 1559 阅读 · 0 评论 -
C++ deque,list
链表特性:1.l.reverse() //逆序2.链表不支持迭代器的随机访问it++;可以it+1;不行3.可以直接删除值,删掉所有特定值的元素l.remove(2);#include <iostream>#include <algorithm>#include <string>#include <deque>#inc...原创 2019-01-21 18:45:09 · 263 阅读 · 0 评论 -
C++ 单例设计模式
#include <iostream>using namespace std;// 单例模式 --- 懒汉式class Singleton{private: Singleton() { }public: static Singleton* GetInstance() { if (m_instance == nul...原创 2019-01-26 21:00:45 · 233 阅读 · 1 评论 -
C++抽象工厂
#include <iostream>#include <string>using namespace std;// 抽象工厂模式// 衣服的基类class Clothes{public: virtual void show() = 0;};class AD_T_shirt:public Clothes{public: void s...原创 2019-01-27 21:40:01 · 182 阅读 · 0 评论 -
C++ map
map :键值对map<int,string> m;mp.insert(make_pair(1,“faith1”));mp.insert(pair<int,string>(3,“faith3”));mp.insert(map<int,string>::value_type(2,“faith2”));mp[4] = “faith4”;insert是函数...原创 2019-01-22 18:43:37 · 164 阅读 · 0 评论 -
C++ 组合模式
#include <iostream>#include <list>#include <string>#include <algorithm>using namespace std;class IFile{public: virtual ~IFile(){} virtual void show() = 0; ...原创 2019-01-28 19:56:23 · 179 阅读 · 0 评论 -
STL标准模板库
1.算法,容器,仿函数,适配器,迭代器容器:类模板 ---->各种各样的数据结构算法:函数模板---->100+算法如统计,排序,遍历等迭代器:对容器中元素提供统一的遍历方式大部分容器都有属于自己的迭代器有迭代器的容器都有两个基本方法:1.begin()函数:返回指向第一个元素的迭代器2.end()函数:返回指向最后一个元素的下一个元素的迭代器迭代器可以近似当做一个指针...原创 2019-01-20 20:56:53 · 114 阅读 · 0 评论 -
Linux探秘之用户态与内核态
一、 Unix/Linux的体系架构如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源、存储资源、I/O资源等。为了使上层应用能够访问到这些资源,内核必须为上层应用提供访问的接口:即系...转载 2019-01-19 20:56:09 · 156 阅读 · 0 评论 -
getchar和getch
1.getchar();从键盘读取一个字符并输出,该函数的返回值是输入第一个字符的ASCII码;若用户输入的是一连串字符,函数直到用户输入回车时结束,输入的字符连同回车一起存入键盘缓冲区。若程序中有后继的getchar();函数,则直接从缓冲区逐个读取已输入的字符并输出,直到缓冲区为空时才重新读取用户的键盘输入。2.getch();接受一个任意键的输入,不用按回车就返回。该函数的返回值是所输入字...原创 2019-01-18 10:12:15 · 516 阅读 · 0 评论 -
进程线程的区别
进程线程的区别 僵尸进程进程是表示资源分配的基本单位,又是调度运行的基本单位。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。如一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。“进程——资源分配...原创 2019-01-13 16:00:10 · 127 阅读 · 0 评论 -
链表
#include <iostream>#include <cstring>using namespace std;struct DATA{ int id; char name[20];};struct Node{ DATA data; struct Node* next;};Node* Create(Node** head...原创 2019-01-13 16:54:16 · 117 阅读 · 0 评论 -
进程间通信方式
进程间通信方式(1)管道:管道是单向的、先进先出的,它把一个进程的输出和另一个进程的输入连接在一起。一个进程(写进程)在管道尾部写入数据,另一个进程(读进程)从管道的头部读出数据。管道包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者可用于运行于同一系统中的任意两个进程间的通信。(2)共享内存:共享内存是被多个进程共享的一部分物理内存。共享内存是进程间共享数据的一种最快的方法,...原创 2019-01-23 21:55:17 · 130 阅读 · 0 评论 -
C++第一天
#include <stdio.h>#include <cstdio>// 命名空间的定义:定义一块命名空间,名字叫 NameAnamespace NameA{ // 原来全局空间可以做的事情,命名空间都可以做:定义变量、函数、宏、结构体、枚举.... int g_a; int g_b; int add(int a, int b...原创 2019-01-08 20:08:48 · 135 阅读 · 0 评论 -
C++友元
友元:可以访问类的私有成员友元函数:如果有一个函数是类A的友元函数,则该函数可以使用A中的所有成员友元声明:在类中写上函数声明,在函数声明前加friend使用注意:1.友元的声明不受访问控制符限制,可以放在类的任意位置2友元函数不是类的成员函数,是外部函数,没有this指针3.友元破坏了类的封装性,慎用(尽量不用)友元类:如果类A是类B的友元类,则类A中所有函数都是类B的友元函数....原创 2019-01-14 19:03:23 · 322 阅读 · 0 评论 -
C++文件操作
1.ofstream fout("aa"); 写文件操作 写的文件是aa2.ifstream写二进制文件ofstream fout("bb",ios::binary);#include <iostream>using namespace std;int main1(int argc, char *argv[]){ char buf[100]; w...原创 2019-01-24 20:56:00 · 127 阅读 · 0 评论 -
C++多继承
1.多继承中类型兼容性原则依然适用2.多继承的二义性:通过类名和域解析符解决#include <iostream>using namespace std;// 多继承class Parent1{public: int a; int b;};class Parent2{public: int a; int d;};class...原创 2019-01-19 18:56:52 · 366 阅读 · 0 评论 -
又又又又写一遍链表
#include <stdio.h>#include <stdlib.h>#include <string.h>//typedef int DATA;typedef enum{TRUE,FALSE,ERROR}BOOL;typedef struct Data{ int id; char name[15];}DATA;typedef struc...原创 2018-12-15 10:31:50 · 175 阅读 · 0 评论