读书人

C语言小疑义

发布时间: 2013-03-12 11:19:35 作者: rapoo

C语言小疑问
#include <stdio.h>
void fun(char m, char* n)
{
n = (char*)&m;
printf("%s ", n);
}
int main()
{
char c = 'a';
char *d = NULL;
fun(c, d);
printf("%s ", d);
return 0;
}
为什么结果为:指针n值正确,指针d还是为NULL?
[解决办法]
这里的指针是临时变量啊,无法改变d的值,参数是值传递
[解决办法]
void fun(char m, char* n),第二个参数传递的是d的副本,而不是d本身,当然不能改变d的值了,应该这样使用:
void fun(char m, char** n)//定义
fun(c, &d);//使用
[解决办法]
m是局部变量,&m没有意义,另外要改变d的指向,需要用char**n,并传入d的地址。
[解决办法]
函数调用参数传递都是“值传递”,也就是说把实参的副本赋给函数内的形参。
针对此问题来说,也就是函数调用时把实参d的值赋给形参n,然后n指向了第一个形参m(但是实参d不会发生改变,依然为NULL)。

读书人网 >C语言

热点推荐