读书人

指针的困惑

发布时间: 2013-10-27 15:21:50 作者: rapoo

指针的不解
指针的不解:我希望用a指针指向b指针指向的内存,为什么下面的做法不可以?

#include <stdlib.h>
void Exchange(int *a, int *b)
{
a = b;//把a指针指向的内存地址赋给。
}

void main()
{
int *a = NULL;
int *b = ( int *) malloc(sizeof(int));
*b = 5;
Exchange(a,b);//但是函数返回后,a依然为NULL,请问这是为什么呢?}
c 内存 指针 malloc
[解决办法]
因为函数形参是一份copy
要达到目的可以用二级指针或者指针的引用
解法一:
void Exchange(int **a, int **b)
{ *a = *b;}

解法二:
void Exchange(int *&a, int *&b) { a = b;}
[解决办法]
经常看见
说着指针不解 指针很难
其实 你不懂的东西是 函数参数传递 和 指针 没什么必然联系
指针:真是无妄之灾
函数参数:谢谢你帮我背黑锅了

C函数参数只有值传递
其实学函数的时候 早就将结果你这种写法
swap(a, b)
{
t = a
a = b
b = t
}
//没有成功交换

你这里的写法是

int *a = NULL;
/*Exchange(a,b);函数调用其实是*/
Exchange.a = main.a //参数传递
Exchange.b = main.b //参数传递
Exchange.a = Exchange.b //函数执行
}//函数调用解释
//以上代码中 针对main.a的赋值只有 = NULL 这一次 其他时候最多也只是把main.c写在赋值符号右边一直没有修改main.a的值

读书人网 >C语言

热点推荐