C语言和JAVA一样,函数参数传递方式都为值传递方式

来源:互联网 发布:web程序员怎么兼职地州 编辑:程序博客网 时间:2024/05/22 17:34
定义按值传递和按引用传递这两个术语是重要的。
按值传递意味着当将一个参数传递给一个函数时,函数接收的是参数的一个副本。因此,如 果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味着当将一个参数传递给一个函数时,函数接收的是参数的内存地址,而不是参数的副本。因 此,如果函数修改了该参数,调用代码中的原始值也随之改变。
JAVA和C中只有值传递方式,C++中有引用传递方式
但C中若传递的参数为地址,则可以达到引用传递的效果,但仍是值传递方式

 

void GetMemory(char *p, int num)
{
 p= (char *)malloc(sizeof(char) * num);
}

 

int main(void)
{
char *str = NULL;
GetMemory( str, 100 ); // str 仍然为 NULL 
strcpy(str, "hello"); // 运行错误

return 0;
}

 

Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧NULL,原因在于 (这里犯了值传递的错误,虽然p是指针,但对于p本身来说,这里还是值传递.即函数生成了个值和p相同的char *临时变量,即p的拷贝,为这个临时指针分配了空间,p并没有改变.
)