#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/