摘要: 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 != 阅读全文
posted @ 2013-05-23 21:59 独墅一枝花 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 内核在创建进程的时候,在创建task_struct的同时,会为进程创建相应的堆栈。每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈。 阅读全文
posted @ 2013-05-23 15:29 独墅一枝花 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 中断、异常和系统调用的关系1.中断的概念中断是CPU的一个功能,就是CPU停下当前的工作,保留现场后自动地转去执行相应的处理程序,CPU控制权发生改变,、处理完该事件后再返回断点继续执行被刚才被打断的程序。2.中断的分类2.1分为软中断和硬中断软中断:a.编程异常通常叫做软中断b.软中断是通讯进程之间用来模拟硬中断的 一种信号通讯方式。c.中断源发中断请求或软中断信号后,CPU或接收进程在适当的时机自动进行中断处理或完成软中断信号对应的功能d.软中断是软件实现的中断,也就是程序运行时其他程序对它的中断;而硬中断是硬件实现的中断,是程序运行时设备对它的中断。硬中断:a.硬中断是由外部事件引起的因 阅读全文
posted @ 2013-05-21 19:22 独墅一枝花 阅读(5362) 评论(0) 推荐(1) 编辑
摘要: 1.rand()每次的随机都一样,范围是0到RAND_MAX;RAND_MAX是宏定义,在stdlib.h中定义,大小是32767#include #include //rand()的头文件,产生随机数的范围是 0到RAND_MAX int main(){ int i; for (i... 阅读全文
posted @ 2013-05-20 15:40 独墅一枝花 阅读(267) 评论(0) 推荐(0) 编辑
摘要: staticstatic变量C语言中static的用法static变量只能初始化一次在函数内部定义的static变量,在函数调用过程中,能够保存值,意思就是下次调用函数,这个函数里的这个变量有值,不能被再次初始化#includevoid a(){ static int n = 5; pr... 阅读全文
posted @ 2013-05-19 23:54 独墅一枝花 阅读(595) 评论(0) 推荐(0) 编辑
摘要: 问题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 阅读全文
posted @ 2013-05-19 21:34 独墅一枝花 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 宏定义是写在.h文件里还是.c文件里?1.不管是定义在.h文件还会.c文件,程序都会正常运行。2.如果.h中不需要用到的宏,都定义到.c里,因为等一个工程里需要include多个.h的时候,你在.h里定 义很多宏不方便,因为你一定不能重复定义。但是定义在.c里就不要紧了。3.如果写的宏想要提供给别的程序调用,那么写到.h里面,如果只是在本文件中使用,那么就写到.c里面4.极少会写在*.c文件中的,绝大多数是写在*.h中,因为.c文件要包含h文件的. 头文件里加上 #ifndefXXXXXXX #defineXXXXXXX #endif 的只包含一次保护.我们#define的东西就不怕会重复包含 阅读全文
posted @ 2013-05-19 15:09 独墅一枝花 阅读(7936) 评论(0) 推荐(1) 编辑
摘要: 桶排序算法(BucketSort)工作的原理:将阵列分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。代码如下:QuickSort.c文件如下:#include "QuickSort.h"void QuickSort(double R[],int s,int t)//使数据最快的达到目的位置;是随机选择一个数,还是选择第一个数, //肯定选择第一个操作简单,但是效率不见得高{ int i, j; double temp; if(s>=t) //只剩一个... 阅读全文
posted @ 2013-05-19 14:04 独墅一枝花 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 冒泡排序算法:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:1.比较相邻的元素。如果第一个比第二个... 阅读全文
posted @ 2013-05-19 14:03 独墅一枝花 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 快速排序算法采用分治法思想;快速排序是冒泡排序的一种改进;快速排序的标志位的选取有一下几种情况:1.每次都取第一个元素,这样操作简单,但是效率不一定高2.每次都取最后一个元素,同上3.随机产生一个下标,用此下标所表示的数字作为标志位4.随机产生一个下标,用此下标所表示的数字与第一个元素交换,剩下的操... 阅读全文
posted @ 2013-05-18 16:45 独墅一枝花 阅读(212) 评论(0) 推荐(0) 编辑