做编程题时,使用字符串一般都是直接用的C++的string类库,比C语言指针型操作字符串要简易方便很多。但是笔试题中,经常考察指针在C语言字符串中的问题。
下面就我遇到的一些题,谈下我的理解,如有偏差请指正。
第一题:
void f(char *p)
{
p=(char*)malloc(10);
strcpy(p,"Hi");
}
void main()
{
char *p=NULL;
f(p);
printf("%s",p);
free(p);
system("pause");
}
这段代码的打印结果是:null.而不是Hi.
原因在于:f函数对参数p进行值传递,函数内形参的操作并不会影响实参的值,实参p仍然是空。
如果想要成功将”Hi“赋给主函数中的p,有两种方法,一种是地址传参,一种是引用传参。代码分别见下。
地址传参
void f(char **p)
{
*p=(char*)malloc(10);
strcpy(*p,"Hi");
}
void main()
{
char *p=NULL;
f(&p);
printf("%s",p);
free(p);
sy