传递指针地址
Passing a pointer address
int main()
{
int x = 2, y = 4;
func(&x, &y);
printf("%d %dn", x, y);
return 0;
}
void func(int *x, int *y)
{
int *temp;
temp = x;
x = y;
y = x;
}
嗨
对于这段代码,我不知道为什么输出是24而不是4 4。由于func()中的x = y意味着x现在指向y的地址,而func()中的y = x意味着y现在指向x的地址(即y),因此两个变量现在都已经指向y了。
多谢!
答案很简单:您更改func
内部的指针值-但不是它们指向的值。我猜你想交换变量(由于temp
var)。
这段代码应该可以工作(交换值):
void func(int *x, int *y)
{
int temp = *x; // dereferencing the pointer to get the value it points at.
*x = *y;
*y = temp;
}
保持你最初的期望(由于第二次赋值,这对代码没有任何意义):
void func(int *x, int *y)
{
*x = *y;
*y = *x;
}
不,func()
将接收这些地址的副本,这不会影响函数外的变量-一旦func()
退出,对func()
本地变量所做的所有更改将被丢弃。
您只是暂时将'x'的地址分配给函数中的'y'的地址。为了进行赋值操作,需要对指针解引用。
*x = *y;
*y = *x;
试试这个
#include <iostream>
using namespace std;
void func(int *x, int *y);
int main()
{
int x = 2, y = 4;
func(&x, &y);
//printf("%d %dn", x, y);
cout << "X - " << x << endl;
cout << "Y - " << y << endl;
return 0;
}
void func(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
您正在复制传入的指针,它们是您的函数的局部。你对它们做的任何改变都不会影响外部。您应该通过引用&
来捕获指针。
void func(int*& x, int*& y){
// as before...
}
现在,函数内部的更改将正确地反映在函数外部。但问题依然存在。你传入了局部变量的地址,并试图改变它们的指针——这行不通。当您获取变量&x
的地址时,您创建了一个新的临时指针,该指针不能转换为引用到指针。这样做:
int main(){
int x = 2, y = 4;
int *px = &x, *py = &y;
func(px, py);
printf("%d %dn",*px,*py);
}
Edit:如果您想要交换/设置x
和y
的值,而不仅仅是一些指针,请按照其他答案的状态执行。
问题是您正在尝试编写自己的std::swap
版本。
int x = 2, y = 4;
std::swap(&x, &y);
printf("%d %dn", x, y);
return 0;
相关文章:
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 将地址分配给本地指针后,公共对象的变量将消失
- 为什么指针不写入类的地址?
- CUDA:统一内存和指针地址的更改
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 如何从绝对地址的 C 样式指针创建对C++对象的引用
- 当我在 C++ 中将派生类的指针分配给指针时,地址会更改
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 如何在程序集函数中将元素数组作为参数传递时转发 ARM 寄存器的地址指针
- 如何使用构造函数初始化内存地址(指针变量)?
- 数组基础地址指针
- 如何在不使用返回的情况下从函数获取变量的地址(指针)
- 保存QWidgets的地址/指针
- C++ 读取内存地址/指针和偏移量
- 从存储在 CTreeCtrl 的 LPARAM 中的结构中检索地址/指针 (IXMLDOMNode*) - 不起作用
- 简单的C++地址/指针澄清
- 如何获取成员函数的地址指针
- 当“按引用传递”成为强制传递而不是按地址/指针传递时
- C++ 为什么不是同一个地址(指针)