首页 > 解决方案 > 如何正确地将指针传递给函数?

问题描述

我似乎无法将指针传递给内存地址。我认为下面的代码会将ptr指向的内存地址传递给 my func(),然后当我打印出其中的地址时,func()它会显示与 inside 相同的地址ptrmain()但这不是我所看到的。p的地址与 的地址不同ptr

如何正确传递指向函数的指针?

#include <iostream>
using namespace std;

void func(int* p)
{
    printf("p address: %p\r\n", &p);
}

int main()
{
    int* ptr;
    memset(&ptr, 0, sizeof(int));
    printf("ptr address: %p\r\n", &ptr);
    func(ptr);
}

标签: c++pointers

解决方案


在此声明中:

void func(int* p)

该变量p确实是 的副本ptr,因此它们具有不同的内存地址。此处适用与int参数相同的规则。在这种情况下,指针没有什么特别之处。不要被指向的值是相同的事实混淆,即*p*ptr是相同的。对象pptr仍然是彼此的副本,并且具有不同的地址。

如果您希望参数p与 具有相同的地址ptr,请通过引用接受它:

void func(int* &p)

当然,它们仍然指向同一个地址。


推荐阅读