沉静
  
  首页 >>  
我的日历
分类日志
友情链接
最新评论
搜索日志
访问计数
获取 RSS
我的 Blog:
youalwayscan 最新的 20 条日志
[心情留言]
[点滴积累]
[好文共赏]
[C/C+基础]
[Unix/Linux基础]
[WxWidgets]
[VC/MFC]
全站 Blog:
全站最新的 20 条日志

 

question(C++)

   C/C+基础2005-3-30 11:34
改错题,只能在原来的基础上增加代码,不能删除代码
#include <stdio.h>
#include <malloc.h>
void foo(int age,char *b)
{
b = (char *)malloc(64);
sprintf(b,"Your Age is %d",age);
}
int main()
{
char *f;
foo(23,f);
printf("%s\n",f);
}

错误原因:
编译过程中,编译器对参数b制作副本_b,foo函数中申请内存后,其内存地址被赋给的是_b,而不是指针b。foo(23,f)函数运行一遍后实参f的内容没有产生任何变化,即没有指向函数内分配得到内存的地址。对指针f所指内容进行打印肯定出现错误,因为指针f没有指向任何内容。

这个问题考察的是
在函数内部分配内存,欲通过指针参数返回分配得到的内存,如何实现?

上述改错题的解答答案如下:
#include <stdio.h>
#include <malloc.h>
void foo(int age,char **b)
{
*b = (char *)malloc(64);
sprintf(*b,"Your Age is %d",age);
}
int main()
{
char *f = NULL;
foo(23,&f);
printf("%s\n",&f);
return 0;
}



标签集:TAGS:
回复Comments()点击Count()

回复Comments

{commenttime}{commentauthor}

{CommentUrl}
{commentcontent}