C语言按值传递、按址传递

来源:互联网 发布:js null的valueof 编辑:程序博客网 时间:2024/05/16 19:54

  1. 按值传递:是把实参的值赋值给行参,相当于copy。那么对行参的修改,不会影响实参的值 。
  2. 按址传递: 是传值的一种特殊方式,只是他传递的是地址,不是普通的赋值,那么传地址以后,实参和行参都                     指向同一个对象,因此对形参的修改会影响到实参。

#include <stdio.h>

#include <string.h>
void malloc_memory (char *ptr , int size)
{
ptr = malloc(size);//
传参过来ptr的值为NULL,然后malloc()重新给ptr分配内存,但是不改变main函数中ptr的值。
}
int main(int argc ,char **argv)
{
char *ptr = NULL ;
malloc_memory(ptr , 10);

strcpy(ptr , "hello");// 这里 ptr的值仍为NULL,不能往里写任何东西
  
printf("ptr: %s\n" , ptr);
return 0;
}
运行结果: segmentation fault (core dumped) //段错误
解决办法如下:
修改程序(2种方法):
1,利用指针函数返回一个地址

声明函数: void *malloc_memory2(int size){

return malloc(size);

}

在main函数里,
char *ptr2 = NULL;
prt2 = malloc_memory2(10);//操作地址来控制ptr2
....
2,若坚持利用参数
声明函数 void malloc_memory(char **ptr , int size);
{
*ptr = malloc(size);
}
在main函数里 
char *ptr3 = NULL;
malloc_memory3(&ptr3 , 10);//按址传递。把ptr3的地址传过去,直接对ptr3内存进行赋值。

原创粉丝点击