传递参数到函数中

5
在这个程序中,我创建了两个指针(a,b),它们指向x和y的内存地址。在函数中,我创建了一个交换a和b的内存地址的操作(所以b=a和a=b)。但是编译时出现了错误(invalid conversion from 'int' to 'int*'),这是什么意思呢?我是把指针传递到函数中还是将它作为普通的int类型读取了呢?
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
void pointer(int* x,int* y)// Swaps the memory address to a,b
{
    int *c;
    *c = *x;
    *x = *y;
    *y = *c;
}

int main()
{
    int x,y;
    int* a = &x;
    int* b = &y;
    cout<< "Adress of a: "<<a<<" Adress of b: "<<b<<endl; // Display both memory address

    pointer(*a,*b);
    cout<< "Adress of a: "<<a<<" Adress of b: "<<b<<endl; // Displays the swap of memory address  

    return 0;
}

错误信息:

C++.cpp:在函数'main()'中:
C++.cpp:20:16:错误:从'int'到'int*'的转换无效[-fpermissive]
C++.cpp:6:6:错误:初始化'void pointer(int *,int *)'的参数1[-fpermissive]
C++.cpp:20:16:错误:从'int'到'int*'的转换无效[-fpermissive]
C++.cpp:6:6:错误:初始化'void pointer(int *,int *)'的参数2[-fpermissive]


你实际上想要交换指针所指向的值还是交换变量的地址?只是问一下,因为正如 Vlad 指出的那样,目前你正在交换值,而这可以在没有任何指针的情况下完成(在我看来更好)。 - 463035818_is_not_a_number
我正在交换内存地址。 - Camilo Salazar
嗯,这很有趣。也许我只是不理解它的用途,但是我很难理解它如何使用。难道不是这样吗:在交换之前指向a的任何指针在交换之后将指向b。因此它实际上具有与交换值相同的效果,或者是我太困惑了? - 463035818_is_not_a_number
4个回答

3

*a*bint类型,而ab都是int*类型。您的函数接受两个int*,所以您只需要更改

pointer(*a,*b);

to

pointer(a,b);

3
你正在传递*x参数 - 这意味着你正在取消引用指针,并传递a和b所指向的内存位置的值。
解决方法是传递指针,因为a和b已经是指针:
pointer(a,b)

2
在这个函数调用中
pointer(*a,*b);

表达式*a*b的类型为int,而函数对应的参数类型为int *

如果你想交换两个指针而不是指针所指向的值(对象x和y),那么函数应该如下所示:

void pointer( int **x, int **y )// Swaps the memory address to a,b
{
    int *c = *x;
    *x = *y;
    *y = c;
}

并称为

pointer( &a, &b );

或者您可以将参数定义为引用类型。例如:

void pointer( int * &x, int * &y )// Swaps the memory address to a,b
{
    int *c = x;
    x = y;
    y = c;
}

并且像这样调用它

pointer( a, b );

谢谢大家!我被难住了! - Camilo Salazar
1
@Robin Hartland 这不是我的职责。:) 我会使用 std::swap。:) - Vlad from Moscow
@Robin Hartland 如何确定某人是否具备C++中级编程能力? - Vlad from Moscow
@Robin Hartland 感谢您的解释。:) - Vlad from Moscow
谢谢再次提醒,我会更准确地命名我的函数。虽然可以使用交换函数,但那太简单了!xD - Camilo Salazar
显示剩余2条评论

0

两个指针 *a*b 都是整数类型。
但变量 ab*int 类型。
不要混淆它们...你需要将你的 pointer() 函数改为:

pointer(a, b);

这段代码的作用是,将指针传递给函数。由于变量a和b已经是指针,因为它们都是*int类型,所以可以直接传递。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接