C++ 将点传递给函数
在这个程序中,我创建了两个指针(a,b),它们指向x和y的内存地址。在我创建的函数中,它应该交换a和b的内存地址(所以b=a和a=b)。当我编译时,它会给我一个错误(从'int'到'int*'的转换无效),这是什么意思?我正在传递一个指向函数的指针,还是将其作为常规int读取C++ 将点传递给函数,c++,pointers,C++,Pointers,在这个程序中,我创建了两个指针(a,b),它们指向x和y的内存地址。在我创建的函数中,它应该交换a和b的内存地址(所以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
#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;
}
#包括
使用std::cin;
使用std::cout;
使用std::endl;
void指针(int*x,int*y)//将内存地址交换到a,b
{
int*c;
*c=*x;
*x=*y;
*y=*c;
}
int main()
{
int x,y;
int*a=&x;
int*b=&y;
cout*a
和*b
是int
类型,而a
和b
都是int*
类型。您的函数需要两个int*
,所以您所要做的就是更改
pointer(*a,*b);
到
您正在传递*x
参数->这意味着您正在解引用指针,并传递a和b所指向的内存位置的值
解决方案是传递指针,通常是a
和b
,因为它们已经是指针:
此函数调用中的指针(a,b)
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 );
两个指针*a
和*b
都是整数。
但是变量a
和b
是*int
s.
不要把它们混淆在一起…您必须将指针()
函数更改为:
pointer(a, b);
因为a
和b
已经是指针了,因为它们都是*int
s。谢谢大家!我被难住了!更好的是,调用函数类似pointerSwap()
而不是非常没有信息的指针()“< /代码> @罗宾哈特兰,这不是我的功能。”(我将使用STD::SWAP:):Robin Hartland如何确定是否有人能编程到C++中的中间层?@莫斯科弗拉德,我不是一个完整的NOOB:)从初学者开始的一步是中间,对吗?我知道在那里有一个C++的完整宇宙,对于“高级”,“专家”。你真的想交换指针指向的值还是交换变量的地址?只是问问,因为正如Vlad所指出的,你在交换值,这可以在没有任何指针的情况下完成(这比IMHO好得多)我正在交换内存地址。嗯,这很有趣。也许我不明白,但我在理解如何使用它时遇到了问题。不是这样的吗:之前指向a
的任何指针在交换后都会指向b
。因此,它实际上与交换值具有相同的效果,还是我太困惑了??
pointer(a, b);