在这个程序中,我创建了两个指针(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]
答案 0 :(得分:3)
*a
和*b
的类型为int
,而a
和b
的类型均为int*
。您的功能需要两个int*
,所以您需要做的就是更改
pointer(*a,*b);
到
pointer(a,b);
答案 1 :(得分:3)
您正在传递*x
个参数 - &gt;它意味着您正在取消引用指针,并传递a和b指向的内存位置值。
解决方案是传递指针,通常a
和b
,因为它们已经是指针:
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);
这是什么,通过指针。a
和b
已经是指针,因为两者都是*int
s。