我对传递指针的工作原理有点困惑。
假设我有以下函数和指针,并且...
编辑:
...我想在函数中使用指向某个对象的指针作为参数。
即:
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/