嵌入式开发中的一些细节续(dlmu2001)

来源:互联网 发布:ai人工智能程序下载 编辑:程序博客网 时间:2024/06/05 06:45

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;

}

这才是传址

原创粉丝点击