- 博客(31)
- 收藏
- 关注
原创 计算机网络之子网划分
有关A B C D四类地址的相关知识我不必再赘述,直奔主题子网划分。我自己学习到子网划分的时候曾经想过子网划分真的好吗?为什么这样想呢?因为没分配一个网络地址,那么这个地址的主机号为全0的和全1的这两个地址是不能被使用的,这不是赤裸裸的浪费么?本来说好的我申请到了一个可以使用100个ip地址的网络,结果我来自己进行子网划分,无语无故的我就浪费了接近1/4,但是我还是太天真!!!但也不是没有道理,子...
2016-07-22 18:19:39 4193
原创 计算机网络之网络基础
说实在的网络模型我只服TCP/IP四层模型,简单实用好理解,为什么这么说呢?因为好记呀!看一遍就能很顺溜的记住每一层及其作用(自己绘的图太丑于是借用了别人做好的图)如图很清晰的看出来后三层的主要服务(自底向上)在我们学习的时候,第一层其实还是分为两层的即就是数据链路层和物理层,这两层定义的是如何使用实际网络来传送数据,可以简单总结一下网络接口层(数据链路+物理):将上层的数据封装成帧,并且
2016-07-21 16:48:27 586
原创 Linux之守护进程
守护进程是在操作系统运行起来以后常驻内存的进程,这些进程默默的在后台进行这自己的工作,当然我们是发现不了的,在linux系统下我们可以使用命令来查看ps axj 参数a表示列出所有用户的进程,参数x表示列出控制终端的和没有控制终端,参数j列出与作业控制相关的信息TPGID那一行为-1的表示没有控制终端,也可以说是守护进程要创建一个守护进程的步骤是这样的:1
2016-07-20 21:46:57 501
原创 Linux之进程
最近在Linux下学习到进程相关的知识,所以就Linux而言谈进程什么是进程?谈什么是进程我可以想到进程是程序的执行实例,但是并不是完整的对进程的描述,具体的来说进程应该是这样的:对操作系统来说:.程序的执行实例.是正在执行的程序.能分配处理器并由处理器执行的实体对内核而言:.担当系统资源分配的实体 (cpu 和 内存)也就是说进程是把程序加载到内存后的实体,
2016-07-20 01:10:12 378
原创 Linux之进程调度
进程调度的任务有三:1.保护处理机的现场信息;2.按某种算法调度进程;3.将处理机分配给进程。这里我谈谈进程的调度算法早期采用的调度方式是基于非抢占式的,也就是说当cpu被分配给一个进程后,它就会一直运行下去,直到该进程完成,或者发生某件事情而导致阻塞时,cpu才会被分派给其他进程。所以它不适用于分时系统和大多数实时系统;所以现在基本都是采用抢占方式,就是说可以根据一些原则
2016-06-08 18:33:36 546
原创 C++中谈重载、覆盖、和隐藏
在学习C++的时候,在了解到多态类(存在虚函数的类)的时候我知道了有关对象模型的概念,在剖析了有关对象模型的知识后,对于其中的派生类继承一个多态基类的时候,会对父类的虚函数进行重写,重写也就是所谓的覆盖掉继承自父类的函数,将自己的对象模型中的相应的虚函数的槽位改为自己的函数,但是问题来了,我们之前学习了函数的重载,还有继承中的函数隐藏,这些到底有什么区别?所以做以下的整理希望能帮到在这里迷惑的你
2016-06-04 12:47:40 303
原创 Linux之小程序进度条
在Linux下写个小程序模拟进度条主要练习一些工具的使用在编写好的程序在编译时使用makefile来一次执行多个动作首先定义一个伪目标all依赖与后面的目标文件.i文件依赖于.c文件 所以执行下面的依赖关系依次类推 则会一次执行所有的动作所以用make就可以执行所有动作最后定义一个清除的伪目标cleanmake clean清理生成的文件程序如
2016-06-02 15:45:45 520
原创 Linux之配置ubuntu中的vim
以前使用vs编程习惯了,现在使用vim显得很不得心应手,但是听说vim也可以配置的像vs一样高大上,所以就进行了一番尝试,先看效果是不是感觉比较有档次了其实很简单几句命令就搞定首先我是在我的用户目录下配置的当然你也可以在root下配置,这要看你平时在什么模式下使用vim首先在我的主工作目录下建立一个.vimrc的文件和一个叫.vim的目录接着在.vim中分别创建一个叫doc
2016-06-02 13:02:50 416
原创 Linux之find命令的使用
在使用Linux的时候,很多时候需要在整个文件系统中寻找某个特定的文件,这里我们可以使用两个常用的命令locate:依靠每天所更新的数据库文件来查找,效率高但是不能查找到最近一天更新的文件find:实时查找,效率低于locate但是灵活性更高我平时喜欢使用的find,所以简单介绍一下find的使用find命令是根据特定的条件在整个文件系统中查找文件,几乎所有的文件属性都可以作为fi
2016-06-02 12:13:51 436
原创 迭代器访问容器中的元素
学习了C++中迭代器的相关知识,Iterator迭代器它提供了访问容器中元素的接口。迭代器范围是由一对迭代器来确定的,两个迭代器分别指向容器中的首元素和为元素之后的位置,这两个迭代器通常被称为begin和end;值得注意的是迭代器end不会指向容器中的任何元素。(迭代器使用与指针颇为相似,访问容器内部的元素的时候只需要解引用就可以访问到元素)#include#include#inclu
2016-03-28 18:22:05 1937
原创 c语言中的字节对齐
一、什么是字节对齐?计算机中的数据在存储时并不是按顺序存储,因为在访问特定的数据类型时通常从特定的内存地址开始,所以数据在存储时特定的类型存储时从特定的地址开始,比如我们所说的int类型的对齐数是4,意思是存储这个int类型的变量的地址%4==0,这就是对齐数为4的意思。二、为什么要字节对齐?字节对齐是的思想就是以空间换取时间。所以在存储数据时采取字节对齐的方式,可以让cpu在访存读取
2015-12-14 18:52:12 552
原创 通过冒泡排序的快速排序练习使用回调函数
首先什么是回调函数?回调函数是什么?函数指针作为调用函数的参数,通过这个指针可以回调这个指针指向的函数,这样的技巧就是利用回调函数,回调函数就是这个指针指向的函数。一个简单的例子:#include#includevoid fun(){ printf("hello ");}void pfun(void (*p)()) //函数的参数是一个函数指针(是一个地址){
2015-12-08 17:56:50 426
原创 字符串操作函数的编写
size_t my_strlen(char const *string)//字符串长度{ assert(string != NULL); size_t count = 0; while (*string++ != '\0') count++; return count;}char *my_strcpy(char *dst, char const *src){
2015-12-08 15:49:36 367
原创 c语言最强大之处--指针
指针是与地址分不开的,提到指针就应该想到地址,因为在c语言中指针变量所存放的值就是一个地址,通过这个值它可以指向这个地址的内存位置,也就可以通过这个指针变量来访问这个内存位置的内容。定义一个指针变量的方法和其他变量是一样的:int *a;char *b;... 这里指针变量a是指向整形的指针,其中a的值是所指向的整形空间的四个字节的第一个字节的地址;b是指向字符型的指针,b的值是这个字符的地址。对
2015-12-08 15:49:32 776
原创 c语言中统计二进制位中1的个数的算法优化
统计整数二进制位中1的个数的办法:int one(int m){ int count = 0; while (m != 0) { if (m % 2 == 1) //进行模2除2一位一位的统计 { count++; } m /= 2; }}或者下面这种位于运算的int two(int m){ int count = 0; whi
2015-12-08 15:49:28 418
原创 c语言中对可变参数列表的简单理解
函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢?c语言提供了可变参数列表来实现。可变参数列表是通过宏来实现的,这些宏定义在stdarg.h的头文件中。头文件中声明了一个va_list类型和va_start、va_arg、va_end三个宏。我们使用可变参数列表的时候需要声明一个va_list类型的变量配合这三个宏使用。va_start(va_list变
2015-12-08 15:49:24 575
原创 c语言中递归函数真的好吗?
递归函数就是直接或者间接的调用自己本身的函数。接触递归的时候我们经常会看到这个程序#include#includelong factorial(int n){ if (n <= 0) return 1; else return n*factorial(n - 1);}int main(){ int n = 5; printf("%ld\n", factorial(n
2015-12-08 15:49:21 667
原创 break和continue语句
在c语言中使用循环是非常常见的,有时候我们会想要提前结束循环,或者循环执行满足(或者不满足)某个条件时接下来的语句我们并不想让它执行,这个时候我们会经常使用到break和continue两个语句。这两个语句在循环中有着很重要的作用。break语句:假设我们要设置一个死循环模拟两个人对弈的过程while(1){ ... //假设是两个人在对弈 ...
2015-12-08 15:49:18 426
原创 一个简单的三子棋游戏(c语言实现)
题目是:在一个3*3大小的矩阵中下棋一方有连续三个子便获胜代码如下:#include#include#include char arr[3][3] = { 0 }; //直接定义外部变量所有的函数可以直接使用 因为考虑到棋盘大小是固定的int size = 9; //棋盘大小固定 每下一个子都会使可
2015-12-08 15:49:14 531
原创 gets()函数和puts()函数的渊源关系
对于字符串的处理函数gets()和puts()的结束标志有必要讨论一下gets()函数是从标准输入设备读取字符串直到换行符结束,但是换行符会被丢弃,并且在末尾加上一个字符串结束标志 '\0' ,而与其相对应的puts()函数是将从标准输入设备输入的字符串打印到屏幕上,但是在打印的时候它会做一件事情就是将刚刚输入时所得到 '\0'自动转换成换行符,就是在输出字符串后自动换行。一个简单的应用:#i
2015-12-08 15:49:11 449
原创 c语言怎么会有这么多的作用域?
首先作用域是什么? 顾名思义作用域就是一个东西能起作用的范围,当然这个解释未免有些太过于笼统,在c语言中作用域就是指声明一个变量,而这个变量能被访问的这个区域就是它的作用域。这个变量的被访问的区域由着个变量的标识符的作用域所决定。标识符的作用域就是程序中该标识符可以被使用的区域。c语言的编译器可以大体的分出四个作用域 分别是:文件作用域、函数作用域、代码块作用域、原型作用域。代码块作用
2015-12-08 15:49:07 426
原创 大小端存储的理解
在计算机内存中的数据存储的都是机器二进制序列,在学习c/c++语言的时候会定义到一些变量,比如int(整形)、char(字符型).....但是在计算机中是怎样存储的呢?计算机的内存地址是有高低之分的,那么一个整形数在内存中占有四个字节它又是怎样存储的呢?是低位放在低地址,还是低位放在高地址?在这里我们可以通过一个小小的c程序来进行验证一下:#include#includeint main(
2015-12-08 15:49:03 435
原创 通过转移表练习函数指针的使用
通过了解指针我们直到了一些常规类型的指针int a=1; //整形变量char b='1'; //字符型变量int *p1=&a; //指向整形指针char *p2=&b; //指向字符型的指针....p1是一个指向整形的指针,p2是一个指向字符型的指针,同样我们也接触了一些高级的指针int **pp=&p1; //二级指针 pp是指向指针的指针int (*p3)[10]
2015-12-06 23:29:51 425
原创 自己实现的字符串操作函数
/*自己编写实现字符串相关的函数包括四个基础的字符串操作函数strlen()、strcpy()、strcmp()、strcat()以及扩展的strstr()还有两个操作内存的memcpy()、memmove()*/#define _CRT_SECURE_NO_WARNINGS#include#include#include/*求字符串长度的函数*/int my_strlen1(con
2015-12-02 10:55:51 413
原创 字符串拷贝的一系列问题
对于字符串处理的函数有很多,这里我们只讨论拷贝的函数首先我们来看一下strcpy()函数#include#include#includechar *my_strcpy(char *dst, const char *src){ assert(dst && src); char *ret = dst; while (*dst++ = *src++) ; return ret
2015-11-30 22:29:08 858 1
原创 简单实现printf函数
使用可变参数列表简单实现printf函数代码如下:my_print.h/*******************头文件*******************/#ifndef __PRINT_H__#define __PRINT_H__#define _CRT_SECURE_NO_WARNINGS#include#include#i
2015-11-27 12:40:59 552
原创 你不知道的宏作用
写程序的时候都会接触到宏这个概念。#define非常常见的一种写法#include#define MAX 1000int main(){int arr[MAX];...return 0;}这里我们定义了一个数组arr它的最大长度是我们宏定义的MAX,所以我们以后再想修改这个最大值的时候只需要在宏定义出修改就可以看,在main函数使用MAX,这样对于程序的修改
2015-11-23 11:13:04 507
原创 递归函数其实不难理解
递归函数就是直接或者间接的调用自己本身。比如:#include#includevoid fun(){ fun(); //调用自己}int main(){ fun(); system("pause"); return 0;}但是这个程序运行起来后会怎样呢?这就是因为刚刚使用的递归不能停止调用自己本身,每次在调用的时候在栈上都要开辟空间,作为函数运行时堆栈
2015-11-22 21:54:34 2873
原创 杨氏矩阵算法
在一个二维数组中,每行都按照从左到右的递增的顺序排序。每列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个数组和一个数,判断数组中是否包含这个数。例如:二维数组1 2 34 5 67 9 10查找数字7.看到这道题的话首先会想到遍历整个数组与要找的数子进行比较然后得出结果所以会写出如下的代码:#include#include#define ROW
2015-11-21 23:16:06 560
原创 浅谈C语言的存储区
C语言中存储区大体上分为三个 静态存储区: 静态存储区是用来存储静态变量和全局变量或者常量字符串的位置,在代码中声明一个全局变量,则必须在所有代码块之外声明,它的生命周期从代码开始执行到结束;若在声明一个变量的时候在前面加上static关键字,则说明该变量是个静态变量,他的生命周期是从声明开始到代码运行结束;还有一种存储在静态区的常量,称为字符串常量,如果定义了一个字符串
2015-11-20 20:32:48 1342 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人