随笔分类 -  C语言

 
[转]内存分配函数 _alloc/malloc/calloc
摘要:_alloc原型:void *_alloc(size_t size);本函数与上述的两个函数不同,因为它是在栈上分配了size大小的内存,因此使用此函数分配的内存不用再担心内存释放的情况了。但是使用此函数需要注意的是:在函数内部使用此函数分配的内存随着函数的终结不复存在,因此不能将此函数分配的内存供函数外部使用。malloc原型:void * malloc(size_t size);该函数将在堆上分配一个size byte大小的内存。它分配的单原完全按字节大小计算,因此如此分配N个单原的student_t,那么要这样实现:(stdent_t *)malloc(N * sizeof (stude 阅读全文
posted @ 2012-10-18 10:07 wenxp2006 阅读(1830) 评论(0) 推荐(0)
Memset、Memcpy、Strcpy 的作用和区别(转)
摘要:(1) Memset原型: extern void *memset(void *buffer, int c, int count); 用法:#include <string.h> 功能: 把buffer所指内存区域的前count个字节设置成字符 c。 说明: 返回指向buffer的指针。用来对一段内存空间全部设置为某个字符 例如: char a[10]; memset(a, '\0', sizeof(a)); memset可以方便的清空一个结构类型的变量或数组。 如:struct _test{char ... 阅读全文
posted @ 2012-05-15 06:14 wenxp2006 阅读(401) 评论(0) 推荐(0)
内存堆和栈的区别
摘要:数据结构的栈和堆首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈。堆和栈都是一种数据项按序排列的数据结构。栈就像装数据的桶或箱子我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体)。堆像一棵倒过来的树而堆就不同了,堆是一种经过排序的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实 阅读全文
posted @ 2012-05-14 15:19 wenxp2006 阅读(274) 评论(0) 推荐(0)
const修饰指针的情况分析
摘要:C语言关键字const是用来限定一个变量不允许被改变的修饰符,当它和指针结合的时候有下面2种情况:1、const放在*前面, const char *p1, p1表示指向常量的指针,这时p1本身可以变化,也就是可以重新指向,但是指向的内容不能修改const char *p1 = "hello";p1++; // okp1[0] = 'w'; // compile error2、const放在*后面, char* const p1, 意思是p1是一个const指针,指向一个字符串,这时p1本身不能改变但是指向的内容可以变化,也就是如下代码1 char* con 阅读全文
posted @ 2012-05-14 15:03 wenxp2006 阅读(263) 评论(0) 推荐(0)
new与malloc的区别
摘要:1.malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2.对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。3.因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。 4.C++程序经常要 阅读全文
posted @ 2012-05-14 10:56 wenxp2006 阅读(196) 评论(0) 推荐(0)