首页新闻找找看学习计划

形参和实参以及内存拷贝

0
悬赏园豆:50 [已解决问题] 解决于 2016-04-25 18:15

void test1(char * p)

{

  p = (char *)malloc(20);

  strcpy(p, "abcde");

}

 

void test2()

{

  char *p1 = “hello”;

  test(p1);

}

 

这里我有个疑问 就是在实参传给形参 紧接分配空间 这个空间包含p1的字符串还是 清空了?

c
涛洛伊的主页 涛洛伊 | 初学一级 | 园豆:79
提问于:2016-04-25 16:41
< >
分享
最佳答案
0

你想明白指针的值就可以了.不是指针指向的值.是指针本身就是一个值.他指向一个内存位置.

这个值是值传递的.只是通过这个值传递.能让子函数操作到 指向的内存.但是外部函数本身的指针变量.在内存中也有一个位置.但是和子函数的参数不在一起.因为他们是值传递的.你用一个指向指针的指针.才能修改外面的指针.

函数调用都是值传递.这个一点要清楚.

收获园豆:50
吴瑞祥 | 高人七级 |园豆:28770 | 2016-04-25 18:01
其他回答(2)
0

char *p1 = “hello”;  

p1是你的身份证号码,绑定了一个银行卡,里面存的是hello

p = (char *)malloc(20); 换了一个银行卡,给里面存了 "abcde"。

理解的关键是pi是指针,指向一个地址,对它的操作中是不是意外指向了一个地址。

 

waiter | 园豆:1000 (小虾三级) | 2016-04-25 17:51
0

可能我没表达清楚,我打印出malloc的大小是32  我百思不得其解 我明明分配的是20 可结果出人意料 问了好多人说什么的都说我觉得最正确的答案应该是 内存字节对齐。

涛洛伊 | 园豆:79 (初学一级) | 2016-04-25 18:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册