同学之路——在路上

专业交流

导航

一个网友的问题,有兴趣改错么?

问题的原始描述,貌似一个面试的问题,问以下程序错在何处,涉及到哪些概念,如何修正?
#include <stdio.h>
void display(char *);   //注意形参为指针类型
main()

 char *str=NULL;
 display(str);          //注意实参也是指针变量,与形参类型匹配,注意参数传递的单项值传递特性
}

void display(char *str)
{
 str=(char *)malloc(100);  //形参是局部变量,该值被修改
 str="sdgjjsk";            //形参值再度被修改,指向字符串常量,使得上句空间丢失
  printf("%s",str);        //输出所指向的字符串常量内容
}
答案每天透露一点点,直到彻底放出。
提示1:注意display函数的形参和实参,采用了什么传递形式?
提示2:程序加了注释,应该没有问题了

改正的纯C版:
#include <stdio.h>
//#include <stdlib.h>
void display(char **);   //注意形参为指针类型
main()

 char *str=NULL;//=(char *)malloc(100);
 display(&str);          //注意实参也是指针变量的地址,注意参数改为了地址传递
 printf("%s\n",str);     //返回主调函数,再次输出内容,检验被修改的结果
}

void display(char **str)
{
 *str="sdgjjsk";       //形参值被修改,但由于参数采用地址传递,被修改的结果能够在主调函数中看到影响
 printf("%s\n",*str);  //输出所指向的字符串常量内容
}

有人愿意奉献个使用引用传递参数的版本么?

posted on 2007-11-26 22:59  Camellia  阅读(205)  评论(2编辑  收藏  举报