C++ 将指针传递给函数 (Howto) + C++ 指针操作

标签 c++ pointers function arguments

我对传递指针的工作原理有点困惑。

假设我有以下函数和指针,并且...

编辑:

...我想在函数中使用指向某个对象的指针作为参数。

即:

void Fun(int Pointer){
    int Fun_Ptr = ---Passed Pointer---; 
    //So that Fun_Ptr points to whatever ---Passed Pointer points to

在 *Pointer 和 &Pointer 符号之间,我很困惑。我知道 *Pointer 意味着给出它所指向的任何东西。

我是否将 void (int *pointer) 放入声明中。那我用这个功能的时候呢?

感谢您的帮助。

编辑 2:

好的,我现在明白在声明中使用 *variable 意味着将传递一个指针。但是,当我使用该功能时呢?

int main(){
    int foo;
    int *bar;
    bar = foo;
    Fun(bar);
}

编辑 3: 好的,如果我错了,请纠正我:

根据上面代码的约定:

bar = &foo 表示:让 bar 指向内存中的 foo

*bar = foo 表示将 bar 指向的值更改为等于 foo 等于的值

如果我有第二个指针(int *oof),那么:

bar = oof 表示:bar 指向 oof 指针

bar = *oof 表示:bar 指向 oof 指向的值,而不是指向 oof 指针本身

*bar = *oof 意思是:把bar指向的值改成oof指向的值

&bar = &oof 意思是:把bar指向的内存地址改成和oof指向的内存地址一样

我有这个权利吗?

编辑 4:非常感谢您的所有帮助(我希望我能接受超过 1 个答案,但我必须选择第一个答案。我不确定社区 wiki 是如何工作的,但我会留下它以这种方式进行编辑(如果您愿意,可以随意将其变成引用指南)。

最佳答案

定义变量和使用变量时 * 的用法有所不同。

在声明中,

int *myVariable;

表示指向整数数据类型的指针。然而在使用中,

*myVariable = 3;

意味着取消引用指针并使其指向的结构等于3,而不是使指针等于内存地址0x 0003。

所以在你的函数中,你想这样做:

void makePointerEqualSomething(int* pInteger)
{
    *pInteger = 7;
}

在函数声明中,* 表示您正在传递一个指针,但在其实际代码体中 * 表示您正在访问指针所指向的内容。

为了消除您的困惑,我将简要介绍与号 (&)

& 表示获取某物的地址,它在计算机内存中的确切位置,所以

 int & myVariable;

在声明中表示整数或指针的地址!

不过这个

int someData;    
pInteger = &someData;

意味着使 pInteger 指针本身(请记住,指针只是它们指向的内存地址)等于“someData”的地址 - 所以现在 pInteger 将指向一些数据,并且可以在您访问它时使用尊重它:

*pInteger += 9000;

这对你有意义吗?还有什么让您感到困惑的地方吗?

@Edit3:

几乎正确,除了三个陈述

bar = *oof;

表示bar指针等于一个整数,而不是bar指向的那个,无效。

&bar = &oof;

& 符号就像一个函数,一旦它返回一个内存地址,你就无法修改它的来源。就像这段代码:

returnThisInt("72") = 86; 

无效,你的也是。

最后,

bar = oof

并不意味着“bar 指向 oof 指针”。相反,这意味着 bar 指向 oof 指向的地址,因此 bar 指向 foo 所指向的任何地址 - 而不是 bar 指向 foo 指向的 oof。

关于C++ 将指针传递给函数 (Howto) + C++ 指针操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3796181/

相关文章:

C++ 返回字符串

ios - 如何在 swift 中将字节数组转换为 base64 字符串?

c++ - 指针分配给了错误的局部变量

arrays - 什么时候返回数组或散列,什么时候只返回引用?

javascript - 如何在 JXBrowser 中调用 javascript 函数

c++ - 模板、通用容器和唯一容器,C++

c++ - 创建一个自定义的lightdm迎宾器

sql - 函数结果的列标题

c++ - 我可以在单读/单写队列中用 volatile 替换原子吗?

c++ - 指针和引用传递 C++