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

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;

}

这才是传址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值