c
文章平均质量分 58
qdlgdx_lsy
这个作者很懒,什么都没留下…
展开
-
函数指针和指针函数
函数指针和指针函数1.两个例子:(1)void *func(void); 这是指针函数的一个例子。按照()的优先级高于*,所以这是一个函数,返回值为指针。(2)void (*func)(void); 这是函数指针的一个例子。函数指针本身是一个指针,指向的是原型为void f(void)的函数。你只需要func=函数名,然后func().即可调用那个函数。#include usi原创 2013-08-21 15:09:24 · 616 阅读 · 0 评论 -
程序的执行过程
原创 2013-04-25 20:06:22 · 467 阅读 · 0 评论 -
memcpy()和memmove()的区别
先来看一下两个库函数的区别:1.当source和dest在内存中没有重叠区域时,两个库函数的作用是一样的。2.当source和dest在内存中有重叠区域时,memcpy()的结果不正确。而memmove()则考虑到了这种情况。因此memmove()是正确的。3.memmove的处理措施:(1)当源内存的首地址等于目标内存的首地址时,不进行任何拷贝(2)当源内存的首地原创 2013-04-08 21:51:32 · 724 阅读 · 0 评论 -
static关键字
在介绍static关键字之前,先说一下链接属性和存储类型。1.链接属性 当组成一个程序的各个源文件分别被编译之后,所有的目标文件以及那些从一个或者多个函数库中引用的函数链接在一起,形成可执行程序。然而,如果相同的标志符出现在几个不同的源文件中时,应该怎样处理?标志符的链接属性决定如何处理不同文件中出现的标志符。标志符的作用域和它的链接属性有关,但这两个属性不相同。原创 2013-11-01 09:41:49 · 671 阅读 · 0 评论 -
可变参数列表
可变参数列表1.stdarg宏 可变参数列表是通过宏来实现的,这些宏定义于stdarg.h头文件,它是标准库的一部分。这个头文件声明了一个类型va_list和三个宏-------va_start, va_arg和va_end。我们可以声明一个类型为va_list的变量,与这几个宏配合使用,访问参数的值。如下面的代码:/* * average.c * * Crea原创 2013-11-04 10:34:41 · 818 阅读 · 0 评论 -
数组和指针的区别
数组和指针的区别 声明一个数组时,编译器将根据声明所指定的元素数量为数组保留内存空间,然后再创建数组名,它的值是一个常量,指向这段空间的起始位置。声明一个指针变量时,编译器只为指针本身保留内存空间,它并不为任何整形值分配内存空间。而且,指针变量并未被初始化为任何指向任何现有的内存空间。如果它是一个自动变量,它甚至根本不会初始化。如int a[5]; int *b;这个声明之后,表达式*原创 2013-11-04 09:16:46 · 740 阅读 · 1 评论 -
结构体中数组放在最后位置的问题
以下出自“C Programming FAQS”.先看下面的代码:struct name { int namelen; char namestr[1];};struct name *makename(char *newname) { struct name *ret = malloc(sizeof(struct name) - 1 + strlen(newname) + 1);转载 2013-11-20 22:05:29 · 2061 阅读 · 0 评论 -
memcpy函数的实现及改进
memcpy函数的实现及改进memcpy主要是用来拷贝不重叠的内存块。下面一步步的来改进memcpy的实现。最初的解决方法是使memcpy对NULL指针进行检查,如果指针为NULL,就给出一条错误信息,并中止memcpy的执行。#include typedef unsigned char byte;void *mymemcpy(void *pvTo, void *p原创 2013-11-08 21:07:28 · 1499 阅读 · 0 评论 -
memset的实现及改进
memset的实现及改进memset函数,用"byte"的值填充内存void *mymemset(void *pv, byte b, int size) { byte *pb = (byte *)pv; while(size-- > 0) *pb++ = b; return (pv);}但是许多计算机上通过先将要填充到内存块中的小值拼成较大的数据类型,然后用拼出的大值填原创 2013-11-08 23:26:47 · 1101 阅读 · 0 评论