05 2013 档案
摘要:大小端的判断,代码如下:#include int main(){ int i = 1; char *c = (char*)&i; if(*c == 1) //*c是char型,但是此处的比较是整型之间的比较,因为1是整数;也可以*c == 'ASCII码1对应的字符' printf("小端\n"); else printf("大端\n"); return 0;}小端:低地址存低位大端:低地址存高位
阅读全文
摘要:堆排序算法http://zh.wikipedia.org/wiki/%E5%A0%86%E6%8E%92%E5%BA%8F
阅读全文
摘要:Linux下vi命令大全基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:1) 命令行模式command mode)制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。2) 插入模式(Insert mode)只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。3) 底行模式(last line mode)将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。
阅读全文
摘要:SA*****160*丰实验环境:1.操作系统:VMware+Ubuntu 12.04 LTS(32-bit)2.硬件平台:32位X86实验要求:1.编程实现fork(创建一个进程实体) -> exec(将ELF可执行文件内容加载到进程实体) -> running program代码如下:#include #include #include #include void main(){ char s[5]; int i; for(i=0; i<5; i++) { s[i]='\0'; } scanf("%s",s); char arr[12.
阅读全文
摘要:1.sizeof()函数的一些思考测试代码如下:#include #include int main(void){ int* nptr1; int* nptr2 = NULL; int* nptr3 = malloc(5*sizeof(int));//重点是这个,sizeof(np...
阅读全文
摘要:malloc(0)返回是什么?测试代码如下:#include <stdio.h>#include <stdlib.h>int main(void){ int* nptr = NULL; printf("%p ", nptr); if( nptr == NULL ) { printf( "现在是空的\n" ); } nptr = malloc(0); printf("用malloc(0)赋值之后\n"); printf("%p ", nptr);//地址的输出格式是%p if( nptr !=
阅读全文
摘要:内核在创建进程的时候,在创建task_struct的同时,会为进程创建相应的堆栈。每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈。
阅读全文
摘要:中断、异常和系统调用的关系1.中断的概念中断是CPU的一个功能,就是CPU停下当前的工作,保留现场后自动地转去执行相应的处理程序,CPU控制权发生改变,、处理完该事件后再返回断点继续执行被刚才被打断的程序。2.中断的分类2.1分为软中断和硬中断软中断:a.编程异常通常叫做软中断b.软中断是通讯进程之间用来模拟硬中断的 一种信号通讯方式。c.中断源发中断请求或软中断信号后,CPU或接收进程在适当的时机自动进行中断处理或完成软中断信号对应的功能d.软中断是软件实现的中断,也就是程序运行时其他程序对它的中断;而硬中断是硬件实现的中断,是程序运行时设备对它的中断。硬中断:a.硬中断是由外部事件引起的因
阅读全文
摘要:1.rand()每次的随机都一样,范围是0到RAND_MAX;RAND_MAX是宏定义,在stdlib.h中定义,大小是32767#include #include //rand()的头文件,产生随机数的范围是 0到RAND_MAX int main(){ int i; for (i...
阅读全文
摘要:staticstatic变量C语言中static的用法static变量只能初始化一次在函数内部定义的static变量,在函数调用过程中,能够保存值,意思就是下次调用函数,这个函数里的这个变量有值,不能被再次初始化#includevoid a(){ static int n = 5; pr...
阅读全文
摘要:问题1:double *d=malloc(10*sizeof(double));d是一个地址,d+1表示的是d后边的另一个double型数字的地址,d+1其实偏移了sizeof(double)即8个字节问题2:malloc向操作系统请求一定长度的连续地址。如果成功返回首地址;如果失败返回NULL问题3:double *d1=malloc(10*sizeof(double));double *d2=malloc(10*sizeof(double));连续两个malloc申请的地址不一定连续,即d1地址块和d2地址块不一定挨着,但是d1和d2内部肯定是连续的,原因见问题1
阅读全文
摘要:宏定义是写在.h文件里还是.c文件里?1.不管是定义在.h文件还会.c文件,程序都会正常运行。2.如果.h中不需要用到的宏,都定义到.c里,因为等一个工程里需要include多个.h的时候,你在.h里定 义很多宏不方便,因为你一定不能重复定义。但是定义在.c里就不要紧了。3.如果写的宏想要提供给别的程序调用,那么写到.h里面,如果只是在本文件中使用,那么就写到.c里面4.极少会写在*.c文件中的,绝大多数是写在*.h中,因为.c文件要包含h文件的. 头文件里加上 #ifndefXXXXXXX #defineXXXXXXX #endif 的只包含一次保护.我们#define的东西就不怕会重复包含
阅读全文
摘要:桶排序算法(BucketSort)工作的原理:将阵列分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。代码如下:QuickSort.c文件如下:#include "QuickSort.h"void QuickSort(double R[],int s,int t)//使数据最快的达到目的位置;是随机选择一个数,还是选择第一个数, //肯定选择第一个操作简单,但是效率不见得高{ int i, j; double temp; if(s>=t) //只剩一个...
阅读全文
摘要:冒泡排序算法:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:1.比较相邻的元素。如果第一个比第二个...
阅读全文
摘要:快速排序算法采用分治法思想;快速排序是冒泡排序的一种改进;快速排序的标志位的选取有一下几种情况:1.每次都取第一个元素,这样操作简单,但是效率不一定高2.每次都取最后一个元素,同上3.随机产生一个下标,用此下标所表示的数字作为标志位4.随机产生一个下标,用此下标所表示的数字与第一个元素交换,剩下的操...
阅读全文
摘要:常用shell命令cd 跳转pscd .. 返回上一级mkdir 创建文件夹lsdir 显示文件夹rmdir 删除文件夹pwd 显示当前路径cp 拷贝ping ifconfiguseradd+用户名 添加用户(root权限才能)password+用户名 不写此句即不设密码;不写用户名即为当前用户设密码userdel+用户名 删除用户userdel -r 用户名 删除用户以及用户主目录rm -rf 删除所有内容,包括目录和文件 r表示递归,f表示强制find -name 文件名 查找文件在当前文件夹下
阅读全文
摘要:希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。希尔排序是基于插入排序的以下两点性质而提出改进方法的:1.插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率2.但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位步长的选择是希尔排序的重要部分。只要最终步长为1任何步长串行都可以工作。算法最开始以一定的步长进行排序。然后会继续以一定步长进行排序,最终算法以步长为1进行排序。当步长为1时,算法变为插入排序,这就保证了数据一定会被排序。代码如下:ShellSort.c文件如下:#include "ShellSort.h"
阅读全文
摘要:C语言中数组的长度能不能为0?长度为0的数组在标准C和C++中是不允许的,如果使用长度为0的数组,编译时会产生错误,提示数组长度不能为0。但在GNUC中,这种用法却是合法的。它的最典型的用法就是位于数组中的最后一项,如上面所示,这样做主要是为了方便内存缓冲区的管理。如果你将上面的长度为0的数组换为指针,那么在分配内存时,需采用两步:首先,需为结构体分配一块内存空间;其次再为结构体中的成员变量分配内存空间。这样两次分配的内存是不连续的,需要分别对其进行管理。当使用长度为0的数组时,则是采用一次分配的原则,一次性将所需的内存全部分配给它。相反,释放时也是一样的。对于长度为的数组,在gcc手册中,有
阅读全文
摘要:算法描述如下:1.从第一个元素开始,该元素可以认为已经被排序2.取出下一个元素,在已经排序的元素序列中从后向前扫描3.如果该元素(已排序)大于新元素,将该元素移到下一位置4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置5.将新元素插入到该位置后6.重复步骤2~5代码如下:Insertio...
阅读全文
摘要:1.float型与零值比较的语句if(x 0.000001) // !=0if(x > -0.000001 && x < 0.000001)// =02.float型与float型如何判断相等浮点数的表示是不精确的,不能直接比较两个数是否完全相等,一般都是在允许的某个范围内认为像个浮点数相等,如有...
阅读全文
摘要:硬件平台:32位X86计算机软甲平台:Windows xp系统sizeof(int) = 4;//4个字节sizeof(float) = 4;//4个字节sizeof(double) = 8;//8个字节相关问题1:float型和double型的精度问题#include <stdio.h>int main(){ float f = 0.1; return 0;}这段代码编译的时候会出现警告原因就是0.1这样的小数默认保存为double型的,所以此处赋给float型会发生截断;float占四个字节,double占八个字节 0.1本身是double型的, floatf = 0.1f 如
阅读全文
摘要:归并排序算法的实现和理解MergeSort.c文件如下:#include "MergeSort.h"#include <stdlib.h>#include <string.h> //memcpy的头文件void Merge(int R[],int low, int mid, int high)//合并函数{ int* R1; int i,j,k; k = 0; i = low; j = mid+1; R1 = (int*)malloc((high-low+1)*sizeof(int)); while(i<=mid && j<
阅读全文
摘要:1.memcpy()函数的实现void *memcpy(void *dest, const void *src, size_t n);从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中void* memcpy(void* dest, const void* source, size_t count){ char *ret = (char *)dest; char *dest_t = ret;//中间变量 char *source_t = (char *)source;//中间变量 while (count--) ...
阅读全文
摘要:段寄存器:CS:代码段DS:数据段SS:堆栈段用作内存指针的特殊寄存器:ebp:栈基址指针,指向栈底esp:栈顶指针指令指针寄存器:eip:指向下一条要执行的指令的地址,同CS一同指向即将执行的那条指令的地址,如CS:EIP特别的指令:call 指令:执行call 指令时:会把当前eip的值压栈保存,并使得eip等于被调用函数的起始地址。leave指令:等价于下面两条指令:movl %ebp, %esppopl %ebpret指令:等价于 popl %eip
阅读全文
摘要:首先介绍一下反汇编命令:objdump -d bomb>a.s 意思是将可执行文件bomb进行反汇编,反汇编的代码存储在a.s文件中gdb常用命令(注:bomb是elf格式的可执行文件):gdb bomb 进入调试quit 退出调试r 运行/重新运行disas phase_1 显示函数phase_1的汇编代码si单步执行c 继续执行x/s 0x**** 以字符串形式查看内容;以s形式显示,s就是字符串的意思p $eax 打印ax的值b phase_1 给函数phase_1设置断点b *0x**** 给此地址设置断点d 2删除第2个断点i r查看所有寄存器值info b查断点
阅读全文
摘要:最近学习C++,对前向声明不是很明白,所以查了很多资料终于搞懂,在此分享一下。首先要明白:1.C++中类必须先定义,才能够实例化。2.两个类需要相互引用形成一个“环形”引用时,无法先定义使用。这时候需要用到前向声明。3.前向声明的类不能实例化。第一种办法:A.h文件A.cpp文件B.h文件B.cpp文件这种方法只能是在A.h中用到B类,那么就包含B类的头文件,这样可以!如果同时在B.h中用到A类,包含A类的头文件时,编译不通过,因为形成环形引用。第二种方法,即前向声明A.h文件A.cpp文件B.h文件B.cpp文件
阅读全文
摘要:SA*****160 吴*实验要求:1.使用Example的C代码分别生成.cpp,.s,.o和ELF可执行文件,并加载运行,分析.s汇编代码在CPU上的执行过程2.通过实验解释单任务计算机是怎样工作的,并在此基础上讨论分析多任务计算机是怎样工作的实验环境:1.操作系统:VMware+Ubuntu 12.04 LTS(32-bit)2.硬件平台:32位X86Example的C代码如下:#include int g(int x){ return x + 3;}int f(int x){ return g(x);}int main(void){ return f(8) + 1;}...
阅读全文

浙公网安备 33010602011771号