7.关于局部变量
局部变量是在栈上分配的空间,只在函数内部有效,退出函数,空间就释放了,看一下一下几个例子
1)void* dlmu_malloc()
{
char Buf[100];
return (void*)Buf;
}
2)void*dlmu_malloc()
{
char *p;
char Buf[100];
p = Buf;
return (void*)p;
}
这两个例子都是分配不到空间的,因为Buf是局部变量,随着函数退出(抛栈),空间就释放了。
3)void *dlmu_malloc(unsingned long Size)
{
char *p;
p = malloc(Size);
return p;
}
这是可以分配到空间的,因为malloc是在堆上分配的,要自己管理。
8.函数参数的传值和传址,看一个例子
char dlmu_malloc(unsigned long Size,char *Buf)
{
Buf = malloc(Size);
return 1;
}
注意函数调用过后,这个Buf的值是不会改变的,如果传入时Buf的值是NULL,则传出时Buf也是NULL,这是因为Buf虽然是个指针,但是这里还是一个传值操作,如果要完成传址,应该这样
char dlmu_malloc(unsigned long Size,char **Buf)
{
* Buf = malloc(Size);
if(*Buf ==NULL) return 0;
return 1;
}
这才是传址