自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

转载 可变参数列表源码分析与实现

1,首先,怎么得到参数的值。对于一般的函数,我们可以通过参数对应在参数列表里的标识符来得到。但是参数可变函数那些可变的参数是没有参数标识符的,它只有“…”,所以通过标识符来得到是不可能的,我们只有另辟途径。我们知道函数调用时都会分配栈空间,而函数调用机制中的栈结构如下图所示:|     ......       |------------------|     参数2   

2017-04-22 19:11:27 942

转载 孤儿进程和僵尸进程

一、定义:什么是孤儿进程和僵尸进程僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。僵尸进程将会导致资源浪费,而孤儿则不会。子进程持续10秒钟的僵尸状

2017-04-22 18:49:15 441

原创 atexit函数详解

函数名: atexit 功 能: 注册终止函数(即main执行结束后调用的函数) 用 法: int atexit(void (*func)(void)); 注意:atexit()注册的函数类型应为不接受任何参数的void函数,exit调用这些注册函数的顺序与它们登记时候的顺序相反。对C语言有所了解的人都知道main函数是整个程序的入口,但是其实不然,在内核中可以使用链接器来

2017-04-22 17:18:24 4541

原创 函数的调用过程,栈桢的创建和销毁

为了能够说明wen1.函数的调用过程主函数main里定义了4个局部变量,然后调用同文件里的foo1()函数。4个局部变量毫无疑问都在进程的栈空间上,当进程运行起来后我们逐步了解一下main函数里是如何基于栈实现了对foo1()的调用过程,而foo1()又是怎么返回到main函数里的。为了便于观察的粒度更细致一些,我们对test.c生成的汇编代码进行调试

2017-04-20 14:35:54 1683 1

原创 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N)

题目是这样的:有一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在。要求:时间复杂度小于O(N);在这里我说一下我解题的各种逻辑和方法。一看到这个题目,最开始的时候,我是这样想的:利用循环直接遍历数组中的每一个数就行了呀!可是后面发现如果这个数组变得非常大的话(假如是10*10的数组,要找的数在最后一个),那它的时间复杂度就是

2017-04-16 13:25:56 1805 1

原创 Could not connect to '127.0.0.1' (port 22): Connection failed.

本人初次尝试linux连接外网,用到了xshell5这个软件给我遇到一个关于XShell连接虚拟机中的centos系统的非常奇葩的问题,在连接的时候报错如下:因为我是第一次配置:首先我先在linux下输入:ifconfig,结果如下:然后我直接在xshell下 键入 ssh 127.0.0.1就出现了最上面的报错。为什么说奇葩呢,我在网上

2017-04-16 12:47:11 23589 3

原创 宏和函数的区别

宏和函数的区别:宏相对于函数的优点:1、在运行速度上宏要比函数的运行速度快, 函数需要调用并且返回值这个过程,而宏却不需要。2、在参数的类型定义上,宏没有类型要求,适合于任何能用>号比较的类型,而函数的参数必须声明特定的类型。3、宏还有一个特殊的地方,宏可以接受类型作为参数。函数相对于宏的优点:1、如果一个函数要被调用很多次,使用函数可以省略很多不必要的内容,而每次使用宏,

2017-04-13 10:59:49 1251

原创 Linux进程管理之task_struct结构体详解

程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。    Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。它定义在linux-2.6.38.8/include/linux/sch

2017-04-12 22:07:44 1095

原创 写一个宏可以将一个数字的奇数位和偶数位交换

宏函数在C语言编程中有不可忽视的作用,并且数字二进制的奇偶位交换也比较常见,所以用宏函数来实现数字二进制的奇数位和偶数位交换不失为一个很好的方法。首先我们要清楚宏函数的用法,其次要有用宏函数实现该功能的整体思路,下面我带着大家分析一下:例:将数字5(0101)交换二进制奇偶位为(1010)即数字10。就是将数字的二进制的第0位和第1位交换,第2位和第3位交换,后面以此类推。首先我们

2017-04-11 19:02:43 821

原创 预处理标识符(两个int整数m和n的二进制表达中,有多少个位(bit)不同)

常用的预处理标识符有很多,以下是几个预定义标识符:(1)__FILE__ :表示正在编译的文件(2) __LINE__:表示的是正在编译的文件的行号(3)__DATE__:表示的是正在编译的日期字符串(4)__TIME__:表示的是正在编译的时间字符串代码如下:#include #includeint main(){ int m = 1999;//0111110011

2017-04-11 18:56:41 899

原创 Linux预处理、编译、汇编、链接和运行的过程(包括一些基本的命令)

在这里呢,以一个程序为例:首先呢,我们用mkdir创建一个目录;ls查看当前目录下的文件信息然后呢cd命令进入这各目录,touchfile是建立一个文件,这里呢只是说一下mkdir和touch的区别。紧接着我们进入正题:vim test.c建立一个文件打开一个文本编辑器,这里呢我已经配置好了vim,所以开头有一些多出来的信息;在这里先

2017-04-10 20:09:03 8209

原创 C语言实现扫雷小游戏(设定游戏简易程度,实现空白,实现跳过第一次选中雷)

首先,演示一下:要写出扫雷,首先要对扫雷有一个基本的认识。分析一下:(1):初始化棋盘初始化棋盘分为两步:第一步,我们给一个全为“*”的棋盘;第二步,我们考虑到在计算雷周围数目的数目的时候,位于边界的位置不好求,所以我们在棋盘的每一边都增加1行或者1列。(2)布雷:布雷我们主要是在随机产生的位置上布雷,所以我们就要用到rand()。(3):打印棋盘打印棋盘也

2017-04-10 15:36:33 2445 1

原创 实现strcpy函数

实现strcpy函数,是很多公司的面试题,在很多书籍上也都提到过。程序代码:#include#include#include#includechar *my_strcpy(char *dest, const char *src){ char *ret = dest; assert(dest != NULL); assert(src != NULL); while (*de

2017-04-08 14:46:27 841

原创 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。

为了方面查看数组的变化,在这里使用了顺序数组,可以直观查看数组的变化。程序代码:#include#includevoid init(int *arr, int sz){ int i = 0; for (i = 0; i < sz; i++) { arr[i] = 0; }}void empty(int *arr, int sz){ int i = 0;

2017-04-08 14:26:42 719

原创 linux环境下实现进度条以及shell脚本实现彩色进度条

在linux环境下,在配置好vim以后,写的进度条的程序 8 #include 9 #include 10 11

2017-04-07 22:47:52 1129

原创 vim的配置(如何配置vim)

配置vim在网上有很多种不同的复杂方法,而且没有具体说明每一步怎么做。我在这里整理了一下,希望大家配置vim的时候可以更快更 首先,如果你要配置vim,就说明你的linux上已经安装了vim,如果没有装,百度会详细回答你的问题。在这里,我详细的给大家讲解一下vim的配置。第一步:我们输入 ls -al命令(查看隐藏文件)如果有.vimrc这个文件(这个文件是有后缀名的),然后输入v

2017-04-06 11:23:39 4685 4

原创 C语言实现三子棋游戏

game.h#ifndef __GAME_H__#define __GAME_H__#include #include #include #define ROW 3#define COL 3void chess_board(char arr[ROW][COL], int row, int col);void mimeograph(char arr[ROW][COL], int

2017-04-06 01:51:51 678

原创 冒泡排序

冒泡排序算法的运作如下:(从后往前)1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3.针对所有的元素重复以上的步骤,除了最后一个。4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。冒泡排序走向图:对n个数进行冒泡排序 ,最多需要n

2017-04-05 20:55:11 526

原创 数组的相关运算(sizeof和strlen的灵活应用)

在我们数组的运算当中,经常会碰到或者用到求数组的长度,求数组中某一个元素的地址的长度或者是数组的运用。我们经常会搞混sizeof和strlen在不同类型数组中的应用,因此我在这里详细的罗列出来我们常见的以及常用的一些典型例子。通过程序的方式加注释 方便大家理解,而且可以实时验证。#include #include #include int main(){ int a[3][4

2017-04-05 19:57:03 627

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除