C语言 C++ 数据结构 linux笔记
个人在学习c语言 C++ 数据结构 linux的笔记
csdn_JSB
这个作者很懒,什么都没留下…
展开
-
C/C++内存管理方式
1.栈又叫堆栈,非静态局部变量/函数参数/返回值等,栈是向下增长的。 2.内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存,做进程间通信。 3.堆用于程序运行时动态内存分配,堆是向上增长的 4.数据段———存储全局数据和静态数据 5.代码段———可执行的代码/只读常量malloc / calloc /reallo...原创 2018-08-14 20:09:01 · 2541 阅读 · 1 评论 -
多态以及它的单继承、多继承、菱形继承的对象模型
什么是多态 同一件事物在不同的场景下表现忽的多种形态。不同类的对象对同一消息做出响应,同一消息可以根据发送对象的不同而采用多种不同的行为方式。静态多态 在编译期间,确定程序的行为(确定具体调用哪个函数) 动态多态 程序运行期间,才能确定程序的运行行为 通常,虚函数是动态绑定,非虚函数是静态绑定,缺省参数值也是静态绑定实现动态多态的条件: 1.基...原创 2018-08-15 11:19:32 · 312 阅读 · 0 评论 -
命名空间和缺省参数和重载函数和引用和内联函数
* 命名空间 需要使用到namespace 关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。//1. 普通的命名空间namespace N1 // N1为命名空间的名称{// 命名空间中的内容,既可以定义变量,也可以定义函数int a;int Add(int left, int right){return left + right;}}...原创 2018-08-03 23:28:13 · 233 阅读 · 0 评论 -
类和对象(上篇)
类的定义class classname{ //类别:由成员函数和变量组成};//一定注意后面的分号 类中的元素称为类的成员;类中的数据称为类的属性或者类的成员变量,类中的函数称为类的方法或者类的成员函数。 类的成员函数默认就是内联的。 类的访问限定符及封装:1. public成员在类外可以直接访问;2. protected和private成员在类外(在...原创 2018-08-10 16:06:53 · 138 阅读 · 0 评论 -
类和对象(中篇)
color=gray类的6个默认成员函数 构造函数、拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载、const修饰的取地址操作符重载构造函数 特殊的成员函数,在创建对象时,由编译器自动来调用,并且在对象的生命周期内只调一次,来完成对象的构造以及初始化。 特性: 1.名字与类型相同 2.没有返回值类型 3.编译器来调(对象构造时,系统自动调...原创 2018-08-14 00:16:03 · 575 阅读 · 0 评论 -
类和对象(下篇)
color=gray对象初始化 初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据列表,每个“成员变量”后面跟着一个放在括号中的初始值或表达式。Data (int year = 1990,int month = 1,int day = 1) :_year(year); ,_month(month) ,_day(day){}注意: 每...原创 2018-08-14 19:45:14 · 125 阅读 · 0 评论 -
Linux下的重要目录/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /tmp
/proc         /proc是linux内核中提供的文件系统,在运行访问内核数据结构,改变内核设置的机制。proc是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应...原创 2018-06-08 00:16:54 · 206 阅读 · 0 评论 -
重要命令: du, df, top, free, pstack, su, sudo(sudo -, sudo -s), useradd, password
【du】: 查看每个文件和目录的磁盘使用空间 选项 含义 zebra stripes are neat -a或-all 显示目录中个别文件的大小。 -b或-bytes 显示目录或文件大小时,以byte为单位。 -c或–total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。 -D或–derefere...原创 2018-06-08 00:37:57 · 198 阅读 · 0 评论 -
无法打开内核设备“\\.\Global\vmx86”: 系统找不到指定的文件。是否在安装 VMwar
点击“开始→运行”,在运行框中输入 cmd 回车打开命令提示符,然后依次执行以下命令输入以下的命令并回车 net start vmci net start vmx86 net start VMnetuserif改变vmware几种服务的启动方式为: sc config vmci start= auto sc config vmx86 start= auto sc config...原创 2018-06-21 09:54:44 · 4805 阅读 · 0 评论 -
进程的调度算法
在不同环境中调度算法的一些目标: 微软雅黑 所有系统: 公平————给每个进程公平的CPU份额 策略强制执行————-保证规定的策略被执行 平衡————保持系统的所有部分都忙碌 批处理系统: 吞吐量———-每小时最大作业数 周转时间———从提交到终止间的最小时间 CPU...原创 2018-06-21 11:07:28 · 507 阅读 · 0 评论 -
. 调研task_struct结构体, 理解结构体中的各个字段的含义.
标识符pid_t pid; //进程的唯一标识 pid_t tgid; // 线程组的领头线程的pid成员的值 pid是进程的唯一表示,范围是0~32767,可以表示32768个进程。 在Linux系统中,一个线程组的所有线程使用和该线程组的领头线程相同的PID,并被存放在tgid成员中。(线程是程序运行的最小单位,进程是程序运行的基本单位。)进程状态进程亲属...原创 2018-07-14 22:45:54 · 264 阅读 · 0 评论 -
进程创建, 等待, 终止. 使用代码实现.
1.fork pid_ t fork(void); 返回值:子进程返回0,父进程返回子进程的id,出错返回-1当一个进程调用fork之后,就有两个二进制相同的进程。而且它们都运行到相同的地方。但每个进程都将开始它们自己的旅程。创建一个进程#include <stdio.h>#include <stdlib.h>#include <...原创 2018-07-15 09:55:34 · 336 阅读 · 0 评论 -
调研popen/system, 理解这两个函数和fork的区别
popen 是标准c提供的一个管道创建函数,其内部操作主要是创建一个管道,调用fork创建子进程,关闭不需用的文件描述符,调用exec函数族执行popen的第一个参数。然后等到关闭。 #include “stdio.h” FILE *popen( const char* command, const char* mode ) 参数说明: command:...原创 2018-07-15 15:57:02 · 274 阅读 · 0 评论 -
封装fork/wait等操作, 编写函数 process_create(pid_t* pid, void* func, void* arg)
题目描述:封装fork/wait等操作, 编写函数 process_create(pid_t* pid, void* func, void* arg), func回调函数就是子进程执行的入口函数, arg是传递给func回调函数的参数. #include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#include&lt;unistd.h&gt;#incl...原创 2018-07-15 17:24:15 · 258 阅读 · 0 评论 -
练习open/read/write/close等文件相关系统调用接口,纵向对比fd与FILE结构体
open#include<stdio.h>#include<stdlib.h>#include<fcntl.h>int open(const char *pathname,int flags);int open(coonst char *pathname,int flag,mode_t mode);pathname:要打开或创建的目标文件fla...原创 2018-07-18 16:28:46 · 212 阅读 · 0 评论 -
其支持输入/输出/追加重定向 的shell
水平有限,只能支持简单的输入/输出/追加重定向。#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>#include<string....原创 2018-07-18 16:44:30 · 437 阅读 · 0 评论 -
简单迷宫------一个出口
#define _CRT_SECURE_NO_WARNINGS#pragma once#include <stddef.h>typedef struct point{ int row; int col;}point;#define SEQ_STACK_SIZE 100typedef struct SeqStack{ point date[S...原创 2018-06-08 23:28:36 · 499 阅读 · 0 评论 -
多个出口的迷宫,求最短路径
//stack.h#define _CRT_SECURE_NO_WARNINGS#pragma once#include <stddef.h>typedef struct point{ int row; int col;}point;#define SEQ_STACK_SIZE 100typedef struct SeqStack{ po...原创 2018-06-08 23:34:30 · 1363 阅读 · 0 评论 -
进程间的通信
匿名管道 int pipe(int fds[]); //失败的返回值是1//fds[0]从管道里读//fds[1]从管道里写举一个例子:(子进程往管道里写,父进程从管道里拿)#include&lt;stdio.h&gt; 2 #include&lt;stdlib.h&gt; 3 #include&lt;unistd.h&gt; 4 #include&原创 2018-07-12 12:45:36 · 182 阅读 · 0 评论 -
使用代码模拟实现僵尸进程, 孤儿进程的场景.
僵尸进程: 1.僵尸状态是一种比较特殊的状态,当进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵尸进程 2.僵尸进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出代码状态 3.所以只要子进程退出,父进程 还在运行,但父进程没有读取子进程状态,子进程进入Z状态#include<stdio.h>#include<stdlib.h&g...原创 2018-07-15 08:04:40 · 406 阅读 · 0 评论 -
算法的时间复杂度和空间复杂度的计算
算法:解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,每条指令可表示一条或多个操作。 设计算法的要求:正确性、可读性、健壮性、时间效率高且空间使用率低、简单性。 时间复杂度是指执行算法所需要的计算工作量,简单说时间复杂度是语句执行的此数;而空间复杂度是指执行这个算法所需要的内存空间。 算法存在好坏、平均和最坏情况: 1.最坏情况:任意输入规模的最大运行次数(上...原创 2018-05-23 21:36:55 · 1236 阅读 · 0 评论 -
分析二分查找、递归实现的斐波那契数列的时间/空间复杂度
一、二分查找的时间复杂度和空间复杂度二分查找的代码:#include<stdio.h>#include<stdlib.h>int Er_Feng_Find(int arr[],int sz, int data){ int left = 0; int right = sz - 1; int mid = 0; while (lef...原创 2018-05-26 16:30:20 · 632 阅读 · 0 评论 -
双链表
//DLinkList.h#pragma once#include<stddef.h>typedef char DLinkType;typedef struct DLinkNode { DLinkType data; struct DLinkNode* next; struct DLinkNode* prev;}DLinkNode;void D...原创 2018-06-06 08:55:50 · 155 阅读 · 0 评论 -
通讯录
实现一个; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 排序所有联系人 (以名字、年龄、性别、手机号、地址排序(由用户选择一种排序方法))//ca...原创 2018-05-09 16:50:43 · 314 阅读 · 0 评论 -
C语言之自定义类型
结构体结构是一些值的集合,这些值称为它的成员,但一个结构的各个成员可能具有不同的类型。 我们为什么要使用结构体呢? 平时,我们要求函数的参数尽量不多于4个,如果函数的参数多于4个就很容易出错,效率也会降低,这时我们就可以用结构体压缩参数个数。结构体的声明:struct tag{ member-list;}variable-list;我们来举个例子:(我...原创 2018-05-09 16:25:37 · 443 阅读 · 0 评论 -
递归的典型问题
什么是递归?程序调用自身的编程技巧称为递归。它通常把一个大型复杂的问题层层转化为一个与原问题相似规模较小的问题来求解。递归的主要思考方式:把大事化小!递归的必要条件:1.存在限制条件,当满足这个限制条件的时候,递归便不再继续 2.每次递归调用之后越来越接近这个限制条件下面我们通过两个有趣的题来更深刻的了解递归。 一、汉诺塔问题 题目:古代有...原创 2018-04-29 18:13:58 · 444 阅读 · 0 评论 -
对函数指针、 函数指针数组、 指向函数指针数组的指针的理解
函数指针: 函数指针,是一个指针,一个指向函数的指针。 我们来看一段代码:#include<stdio.h>#include<stdlib.h>void test(){ printf("hehe\n");}int main(){ printf("%p\n", test);//函数的地址 printf("%p\n", ...原创 2018-04-28 23:23:47 · 302 阅读 · 0 评论 -
浅谈指针与数组之间的恩恩怨怨
首先我们先来了解一下什么是指针,什么是数组:指针:先看这样一段代码:int i=20;//定义一个整形变量iint* p=&i;//定义一个指针变量p,把整形变量i的地址赋给p什么是指针呢? 简单的说就是地址,那指针变量就是存放地址的。“ int * p” ,p是整型指针,其中的“ * ”说明 该变量是指针,“ int ”说明该指针所指的类型是int型...原创 2018-04-28 20:03:33 · 317 阅读 · 0 评论 -
对可变参数列表源码的浅剖析
什么是可变参数?我们通过下面这个例子来看看。 我现在来写一段简单的程序:#include<stdio.h>int Add(int a,int b){ return a+b;}int main(){ int a=10; int b=20; int ret=0; ret=Add(a,b); printf("ret= %d"...原创 2018-04-24 21:40:26 · 233 阅读 · 0 评论 -
浅谈mian函数的参数解析
我们从一开始接触C语言就在使用mian函数,但你们有没有发main函数其实也是被调用的,而且main函数还是有参数的。 main函数在_tmainCRTStartup函数中调用的,而_tmainCRTStartup函数是被mianCRTStartup调用的。这里我们主要讲main函数的参数,那我们先看看main函数的原型:int main(int argc,char *argv[],...原创 2018-04-24 00:19:00 · 2157 阅读 · 3 评论 -
数组的总结
一维数组:1.数组不能写0大小,arr[0] ---->这样写是错误的 解释:(1)你要申请开辟一个空间,但你开辟得到空间是0个大小,没办法开辟,没发访问元素 (2)int arr1[0]; int arr2[0]; 这两个在内存中可能会发生冲突2. 3. int arr[0]={0}; 为什么在...原创 2018-04-04 07:24:54 · 275 阅读 · 0 评论 -
用C语言实现简单的扫雷游戏
扫雷游戏大家应该都不陌生,一个扫雷游戏要满足的基本要求是: 1.第一次扫的位置不能是雷 2.每展开一个位置要显示该位置周围雷的个数 3.若该位置周围没雷,要把周围展开 该游戏的界面是10X10的,有10个雷,大家可根据自己的需求参考去改 该游戏的大体思路是: 1.首先你肯定想到要设置一个数组放雷,有雷为1,无雷为0,玩家每点开一个位置然后根据坐标判断改位置周围雷的个数,然后你要怎样把你...原创 2018-04-11 16:21:25 · 1233 阅读 · 1 评论 -
三子棋
写这个游戏,我们要先把大概思路的框架搭好: 1.3X3的棋盘 2.玩家下:要选择的位置是否在这个棋盘内,选择的位置是否已有棋子 3.电脑下:通过随机数产生位置坐标,同样要判断选择的位置是否已有棋子 4.不管是玩家还是电脑下完都要判断是否赢了 5.判赢:某行某列或对角线上是否有三个一样的,或棋盘是否满了,满了为平局//头文件 sanziqi.h#ifndef __SANZIQI_...原创 2018-04-11 14:42:52 · 206 阅读 · 0 评论 -
猜数字游戏
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<time.h>void game(){ int ret,num; //srand((unsigned int)time(NULL)) //这一句放着也可以,但是这样每次产生的随机数会很接近, //...原创 2018-03-30 10:15:17 · 207 阅读 · 0 评论