被这个问题弄晕拉~~~~

来源:百度知道 编辑:UC知道 时间:2024/06/18 17:16:33
void test(int* a ,int *b )
{
a = b;
}
这里到底是 值传递 还是引用传递?
我看书上说 值传递是传递拷贝 类型为 int float 之类的
引用传递为 传递指针 传递的是指针指向的地址

在这里 a = b; 在函数内 a地址为b地址 a指向的内容为b指向的内容 但函数结束后 这里的结果对原来定义的没有影响
a b 地址和 指向没有改变

如果 我这样做 *a = *b; 这样就改变掉a 指针的地址和值拉。。

还有人说这样做 void test(int **a,int**b); 传递指针的指针 这里是引用传递?值传递? 这样做和上面做有什么不同

对于其中我不是很明白 希望大家回答下我的3个问题。。谢过

在这里 a = b; 在函数内 a地址为b地址 a指向的内容为b指向的内容 但函数结束后 这里的结果对原来定义的没有影响

对啊 改变了 a指针的指向了 和 对a原来指向的值 没有关系啊

我这样做 *a = *b; 这样就改变掉a 指针的地址和值拉

没有改掉a的地址啊 a中存的还是传入的那个数的地址 只是改变了a指向的值 若*a=2 那么a指向的那个值就变成2 了

DREAMWEAVER问题建议````看下帮助

给你举个例子吧,以swap函数为例
void swap(int* a, int* b)
{
int temp = *a;
*a =*b;
*b = temp;
}
int main(0
{
int a = 3;
int b = 5;
swap(&a,&b);
return 0;
}
结合上面的swap函数就达到了交换a,b的目的.此时就是传递地址,而如果
int main(0
{
int* a = 3;
int* b = 5;
test(a,b);
return 0;
}
此时如果跟据你的test函数并不能改变a,b的指向,仔细想想,指针也是一种变量,这时不就相当传值给test函数,而当出了test函数作用域之后当然对a,b的值无影响阿,如果说void test(int **a,int**b),那在主函数中应该这样使用test(&a,&b),这就很明显地说明是传地址给test函数了,传递的是a,b指针变量的地址,可以改变a,b的值
所以总上所说,函数参数出现指针是传值还是传地址这都是要结合主函数看的,当然针对fun(int a )这肯定是传值了
不知道我说的解答了你的疑惑了吗^_^