将一个点传递给一个函数

时间:2015-06-29 17:36:23

标签: c++ pointers

在这个程序中,我创建了两个指针(a,b),指向x和y的内存地址。在我创建的函数中,它应该交换a和b的内存地址(So b = a和a = b)。当我编译它时给我一个错误(从'int'到'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:在函数'int 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]

4 个答案:

答案 0 :(得分:3)

*a*b的类型为int,而ab的类型均为int*。您的功能需要两个int*,所以您需要做的就是更改

pointer(*a,*b);

pointer(a,b);

答案 1 :(得分:3)

您正在传递*x个参数 - &gt;它意味着您正在取消引用指针,并传递a和b指向的内存位置值。

解决方案是传递指针,通常ab,因为它们已经是指针:
pointer(a,b)

答案 2 :(得分: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 );

答案 3 :(得分:0)

两个指针*a&amp; *b是整数 但变量a&amp; b*int s 不要让他们混淆在一起......你必须将你的pointer()功能更改为:

pointer(a, b);

这是什么,通过指针。ab已经是指针,因为两者都是*int s。