#include<iostream>

using namespace std;

void passPointer(int *pointer)
{
    cout << *pointer;
}

int main()
{
    int *iNum = new int(25);

    passPointer(iNum);

    return 0;
}

有人可以向我解释为什么当我在main中使用passPointer()函数时,必须是passPointer(iNum)而不是passPointer(*iNum)吗?是否因为使用*而在参数上取消引用它?请尽可能详细地解释,我有些困惑。

谢谢你们。

最佳答案

我很同情这些问题,因为这是我学习C++时遇到的唯一麻烦之一。

基本问题是,在C++语法中,*&字符用于许多不同的事物,它们具有相似但细微的含义。

对于您的情况,您正在考虑在四个不同的地方使用*

首先,int *iNum = new int(25);*位于声明中。这意味着这是一个类型注释,它表示iNum是一个指针。

第二个位置:passPointer(*iNum);*坐在表达式中。这意味着它是取消引用运算符,表示:“获取iNum指向的值”。在这种情况下,iNum指向的值是int。稍后您将看到,passPointer被声明为接受pointer to int类型的参数,因此您不能将普通的int传递为passPointer的参数。相反,您应该只传递iNum(因为iNum是指向int的指针)。

第三名:void passPointer(int *pointer)*再次位于声明中。这意味着它的含义与开始时的含义相同-它表示pointer是一个指针(指向int)。

第四位:cout << *pointer;*再次位于表达式中。这意味着,与第二种情况一样,这是说“取消引用pointer并获取pointer存储其地址的值”。

关于c++ - 指向函数的C++指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7685862/

10-13 03:48