Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将点传递给函数_C++_Pointers - Fatal编程技术网

C++ 将点传递给函数

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

在这个程序中,我创建了两个指针(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 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);