- 博客(12)
- 资源 (24)
- 问答 (3)
- 收藏
- 关注
原创 断言assert
断言就是声明某种东西应该为真。assert的原型如下:void assert(int expression)当它被执行时,就对表达式进行测试,如果为假,则向标准错误打印一条诊断信息并终止程序。如果为真则继续执行程序。断言使得调试程序变得容易,当程序调试完毕后,我们可以在编译时通过定义NDEBUG消除所有的断言。可以使用-DNDEBUG编译器命令行选项或者在源文件中头文件as
2017-05-31 21:53:29 1364
原创 动态内存分配
1.mallocvoid *malloc(size_t size)malloc的参数就是要分配的字节数,如果内存池中可用的内存满足这个条件,malloc就返回一个指向被分配的内存块起始位置指针。malloc分配的是一块连续的内存,如果内存池是空的,或者它的内存无法满足要求,malloc就返回一个NULL指针。因此,对malloc返回值就行NULL检查是必要的。2.cal
2017-05-31 10:00:35 357
原创 内存操作
根据定义,字符串由一个NUL(‘\0’)字节结尾,所以字符串内部不能包含任何NUL字符,但是,内部包含NUL的字符串是可能存在的,此时我们不能使用字符串处理函数来处理这种类型的数据。我们可以使用另外一组相关的函数它们的操作与字符串函数类似,但是这些函数能够处理任何字节序列。he strn开头的函数不同,这些函数遇到NUL不会停止操作。1.memcpyvoid *memcpy
2017-05-27 16:24:40 439
原创 关于strncpy这个函数
1.不考虑内存重叠的strncpy网上很多博客也写了这个函数,面试也常常会遇到,但是,我发现网上的很多代码都是有问题的,我们先看下大部分网上博客的实现:char *strncpy(char *dst, const char *src, size_t len){ assert(dst != NULL && src != NULL); char *res = dst; while (l
2017-05-27 10:07:51 30516 1
转载 数组元素的访问方式—指针与下标
数组元素的访问方式—指针与下标《c和指针》中有一句话:下标绝对不会比指针更有效率,但指针有时会比下标更有效率!在解释这句话之前说上一句自己的想法:效率很重要,但是不能仅仅为了提高点效率而牺牲某些比较重要的优势,比如可读性,很显然,在数组访问时,使用下标的的访问方式比指针的可读性更强,而有时指针正是程序错误的根源!下面解释下这句话:下面的例子中将数组中的所有元素都
2017-05-25 21:15:13 3192
原创 一个奇怪的数组访问方式
定义一个数组如下:int array[] = { 1, 2, 3 };如果我们要访问第三个元素,很简单:array[2]即可。也可以这样:*(array+2)因为数组名是指针常量,所以是合法的。但是,如果这样呢?2[array] 结果是什么?答案是:数组的第三个元素,即:array[2]、*(array+2)和2[array]是同样的。
2017-05-25 20:34:18 369
原创 指针的*和++(--)同时出现的一些情形
int a[2] = { 1, 10 };int *p = &a[0];如果有下面的操作:*++p*p++++*p++*++p那么它的结果是怎样?如何理解?如果*和++均在左边,则是从右向左结合的:*++p : 先对指针p向前移动1,然后*取该处的值++*p :先取p所指的值,然后对该值+1++*++p :先对指针p向前移动1,取该处的值,然
2017-05-25 16:45:43 822
原创 windows编译lua
1.下载lua源码http://www.lua.org/ftp/lua-5.3.4.tar.gz2.新建win32控制台项目(空项目) 3.解压lua源码解压后,将lua源码中的src中的.c和.h文件拷贝到win32控制台项目中(除了lua.c和luac.c),然后添加到项目的源文件中。接着添加一个main.cpp和main.lua(用于测试)然后生成解决
2017-05-22 10:41:51 716 1
原创 洗牌算法
要求:给定N张扑克牌和一个随机函数,设计一个洗牌算法。代码1:void shuffle1(int *x, int n){ int idx; srand(time(0)); for (int i = 0; i < n; ++i) { idx = rand() % (n - i) + i; swap(x[i], x[idx]); }}这个代码是“从头到尾”洗牌,即
2017-05-17 10:16:54 562
原创 从0~n-1中随机k个有序元素
代码:void getKNum(int k, int n){ for (int i = 0; k; ++i) { if ((bigrand() % (n - i)) < k) { cout << i << " "; --k; } } cout << endl;}其中bigrand()函数产生一个很大的随机数:int bigrand(){ sr
2017-05-16 22:24:45 607
原创 快速排序算法的几种实现
1.一种简单的快速排序:序列范围[l,u]选取第一个元素为枢纽值,然后围绕t划分数组:m=a-1for i =[a,b] if x[i]<t swap(x[++m],x[i])其中a=l+1,b=u。循环终止后有:此时交换x[l]和x[m]即可。代码:void qsort1(int *x, int l, int u){ if (l
2017-05-16 17:32:14 964
原创 以线程实现TCP并发服务器
对服务器来说,以线程为客户服务的方式有三种:1.每来一个客户就为其创建一个线程;2.创建一个线程池,在线程中accept;3.创建一个线程池,在main中accept;对于第一种:int main(int argc, char const *argv[]){ int listenfd,connfd; void sig_int(int); void *doit(void
2017-05-03 10:31:11 632
对图像画包围框进行标注
2016-07-12
标注图像的dll链接库
2016-07-12
python2.7+numpy
2016-02-20
关于封装c++类为DLL的问题
2016-12-13
CUDA错误 __global__ funtion call
2016-11-12
VS2013新建项目出现脚本错误是什么问题?
2016-07-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人