- 博客(30)
- 收藏
- 关注
原创 进程间通信(IPC)介绍
1.进程间通信目的 我们知道计算机执行某个任务时可能并不是只创建一个进程去完成,可能创建了许多进程去共同完成这个任务,这些进程在在相互协调工作时,可能需要在他们之间传输数据,共享某些资源,或者通知某个事件发生,有些进程可能还需要完全控制另一个进程(如debug进程),所以就有了进程间通信,但是我们知道每个进程都有自己独立的虚拟地址空间(分为用户空间和内核空间),进程的用户空间都是独立的,一...
2018-05-06 22:51:31
367
原创 在目录中执行增删查(cd, touch, ls, rm, mv等)改文件动作, 需要哪些权限
linux几个常见命令分析移动目录里面的文件时,被移文件所在目录,和目标目录分别需要什么权限:ls出目录需要什么权限:
2017-11-18 09:56:03
838
原创 用栈和递归解决迷宫问题
今天讲的是一个关于迷宫的面试题,首先咱们先看一下他的简单版本,模型如下图:利用递归把问题简单化,找入口到出口的问题可以转化为从入口四周的合法的点到出口的问题,一旦找到就结束整个递归,在找得同时把能走得路压到一个栈里面,如果
2017-10-17 21:00:19
3668
原创 虚拟继承和菱形虚拟继承的剖析
在上一篇已经讲了一些简单的继承方式,在最后的时候我们设计了一个菱形继承,最终引出了二义性问题,但是并没有对这个问题进行解决,这篇文章将会解决这个问题。首先咱们先介绍一下一个新的继承方式:虚继承 继承格式:class 派生类名字:virtual public/protected/private基类名字{...};接下来咱们写个代码来分析一下他的模型,代码如下:
2017-10-12 17:25:51
479
原创 C++菱形继承模型刨析
继承概念:继承机制是新的类从已有类那里得到已有的特性。亦或从已有类产生新类的过程就是类的派生。原有的类称为基类或父类,产生的新类称为派生类或子类。它是使代码可以复用的最重要的手段。继承关系和访问限定符:<单继承>一个类只有一个直接父类时,称这个继承关系为单继承#include<iostream>class Base{public: Base(int pu...
2017-10-08 14:32:58
429
原创 单链表面试(二)复杂链表的拷贝
已知一个链表有数据域,next指针域和随机指针域,其中随机指针域随机指向该链表的任意一节点,要求复制一条相同的链表。
2017-08-03 09:33:56
558
原创 单链表面试题(一)
链表是最基本的数据结构,链表的相关操作也比较简单,同时它也包含了指针的运用,能把许多知识结合起来,因此链表的面试题在面试中占据很重要的地位,所以我整理了一些关于链表的面试题与大家分享。下图是其中一道求带环链表入口点题的分析图
2017-08-02 11:48:47
658
原创 单链表的增删查改等操作实现
由于数组的一些局限性,在事先必须提前定义大小,然而现实生活中,很多数据元素的大小都不能事先知道,所以数组就不能很好的处理这些事情,然而链表可以弥补数组带来的诸多不便,链表可以让我们任意为一些数据进行空间开辟,根据需要进行内存单元的动态开辟...
2017-07-30 11:53:12
690
原创 C到C++注释的转换
利用状态机的思想来解决C注释到C++注释的转换。(不允许注释嵌套) 在状态内处理,状态间跳转,根据不同的的事情发生相应的动作,并进行相应的状态转换。
2017-07-30 10:59:48
1126
原创 c语言i++和++i和左值的问题
在vs编译器,写c代码如下图:上图中,前缀和后缀的形式的增值操作符都复制一份变量值的拷贝, 相当于系统开辟了一个临时的空间,用于周围表达式的值正是这份临时空间,前缀操作符在进行复制之前增加变量的值,后缀操作符在进行复制之后才增加变量的值,这些操作符的结果不是被他们所修改的变量,而是变量的拷贝,它就可以很好解释为什么当你写出上面图片中的代码,编译器会报错。 参考c和指针第5章的操作符和表达式
2017-07-18 22:11:02
778
原创 剑指offer中atoi()函数的实现
#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<assert.h>_Bool tmp_flag = 0;//判断字符串转换来的数字是否合法 0表示不合法,1表示合法int my_atoi(const char*src){ long long ret = 0; int flag = 1;//判断这个字
2017-07-14 15:10:33
371
原创 对指针数组,数组指针,函数指针数组,函数数组指针的一些简单理解
- 指针,数组,函数#include<stdio.h>int main(){ int arr[10] = { 0 }; int(*p)[10] = &arr ;//(*p)是一个指针,名为p,去掉指针名字就是类型int [10],说明它有能力指向一个有10个 //元素的数组,每个元素为int型。 // 不能用arr赋值,它在这里只代表一个int
2017-07-14 13:56:22
260
原创 剑指offer中的青蛙跳台阶问题
剑指offer---#define _CRT_SECURE_NO_WARNINGS 1//青蛙跳台阶,一次可以跳一个,或者一次跳两个,跳n个台阶,共有多少种跳法。。。。#include<stdio.h>#include<Windows.h>size_t JUMP_FLOOR(size_t count){ if (count <= 0) return 0;
2017-07-14 13:52:27
397
原创 结构体的内存对齐和位段
结构体内存对齐规则:1.第一个成员在与结构体变量偏移为0的地质处。2.其他成员变量对对齐到某个数字的(对齐数)的整数倍的地址处。//对齐数=编译器默认对齐数与该成员的较小值。vs默认对齐数为8。linux默认对齐数为4。3.结构体总大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。对齐原因:1.平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任
2017-07-07 09:19:03
417
原创 字符串逆置递归写法。
//递归写法字符串的逆置#include int i = 0; int j = 0;//创建两个静态变量,用于辅助递归的调用。void reverse_string(char *src){ i--;//每次调用一次减1,使指针(src+i)往后偏移一个字节。 if (src+j < src + i)//当前面的指针(src+j)的地址大于后面的指针(sr
2017-05-17 20:57:08
594
原创 简易版贪吃蛇小游戏。
以上就是我测试的结果,能完成基本的功能。//game.h#ifndef __GAME_H__#define __GAMAE_H__#include#include#include#include#define ROWS 20#define COLS 20#define snake_length (20*20)#define SLEEP 1000//屏
2017-05-17 20:23:30
627
原创 一些字符函数的实现。
#define _CRT_SECURE_NO_WARNINGS 1//求字符串长度。#define _CRT_SECURE_NO_WARNINGS 1#include#include//size_t my_strlen( const char *str)//{// assert(str != NULL);// int count = 0;// while (
2017-05-14 13:11:38
452
原创 一个简单函数的是如何运行的
首先看上图的中的一些指令因为CPU里的寄存器只有4个,eax,ebx,ecx,edx,所以你在编写程序的时候,可能这4个寄存器里都存储有数据了,但是你还需要再用寄存器来存储数据,这时,4个寄存器就明显的不够用了,所以我们用push也就是压栈指令将原寄存器中的内容压栈,然后这时寄存器中的数据就存到了内存中的栈段内,寄存器就空出来了,我们就可以继续使用寄存器来存储新的数据了,当我们需要使用寄存器中
2017-05-13 20:08:05
906
原创 模拟实现strlen函数
#define _CRT_SECURE_NO_WARNINGS 1#include#includesize_t my_strlen(const char *str){ assert(str != NULL);//判断str是否为空 if (*str++)//先对str解引用判断条件是否为真,然后str进行自增 return my_strlen(str)+1;//当*s
2017-04-21 23:26:58
373
原创 改进后的扫雷
game.h#ifndef __GAME2__H__#define __GAME2_H__#include"string.h"#include"stdlib.h"#include"time.h"#include"stdio.h"#define ROWS 14//行数#define LOCS 14//列数#define COUNT 30//雷的个数void s
2017-04-14 20:15:25
1191
原创 简易版扫雷,看见有问题的麻烦评论一下,便于修改。。。。。
game2.h#ifndef __GAME2__H__#define __GAME2_H__#define ROWS 9#define LOCS 9int init_arr(char arr[ROWS][LOCS], int row, int loc);void dis_play(char arr[ROWS][LOCS], int row, int loc);void
2017-04-07 00:06:19
477
原创 三子棋,
game.h#ifndef __GAME__H__#define __GAME_H__#include"time.h"#include"stdlib.h"#include"string.h"#include"stdio.h"#define ROWS 3#define COLS 3void init_board( char arr[ROWS][COLS], int
2017-04-03 19:13:56
655
原创 花括号能否正确配对,有没有大神帮忙看一下对不对,十分感激
#define _CRT_SECURE_NO_WARNINGS 1#include"stdio.h"#include"iostream"int main(){ char ch = '1'; int count = 0, x = 1; while (ch != '\n') { scanf("%c", &ch); if (ch == '{') {
2017-03-29 23:41:31
398
原创 第一次感觉c其实也这么好玩。
#define _CRT_SECURE_NO_WARNINGS 1#include "stdlib.h"#include "time.h" #include "stdio.h"int main(){ srand ((int unsigned)time(NULL)); void mean(); void play(); int input; do
2017-03-25 22:12:17
621
原创 有没有大神帮忙精简一下,欢迎私信。
//在一个排好序的数组中间插入一个数#include"stdio.h"int main(){ int i, n, c; printf("please a n:"); scanf_s("%d", &n); int arr[6] = { 1, 3, 4, 4, 7, 9 }; for (i = 0; i { if (i = 6) { for (
2017-03-22 23:29:05
990
1
原创 筛选法求1到100之间的素数
#include "stdio.h"int main(){ int i, t, j; int a[100] = { 0 }; for (i = 1; i a[i - 1] = i; a[0] = 0; for (j = 1; j if (a[j] != 0){ t = a[j]; for (i = j+1; i if (a
2017-03-21 17:17:19
1446
原创 简单for循环
#include "stdio.h"int prime(int m);int main(void){ int m1,m2,i,count,w1,w2; count=0; for(i=6;i { for(m1=2;m1 for(m2=2;m2 { if(i==m1+m2) { w1=prime(m1); w
2017-03-19 23:09:16
1327
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人