关于引用指针的说明

时间:2019-01-17 09:34:35

标签: c++ pointers reference

我试图通过指向指针的引用,主要有两种情况:

  1. const int* &ref_var- ref_var 是对常量整数的指针的引用。
  2. int *const &ref_var- ref_var 是对整数的常量指针的引用。

现在,第二种情况可以正常工作,因为我无法修改指针本身,但是在第一种情况下,我收到一条错误消息,由于 non-const 指针变量,我认为该消息不应该存在可以将 constant 指针作为参数传递给函数。

代码:

#include<iostream>

using std::cout;
using std::endl;

void fun(const int* &ref_var)  //error: invalid initialization of reference of type const int*& from expression of type int*
{
     //BLANK
}

int main()
{
    int x=9;
    int *p=&x;     //ERROR VANISHES IF P IS DECLARED AS POINTER TO CONSTANT INT         
    fun(p);
    return 0; 
}

函数fun声明为:

void fun(const int *ptr)
{
     //BLANK
}

尽管传递的参数是指向int的 non-const 指针,它仍然可以正常工作。

你能告诉我我要去哪里了吗

1 个答案:

答案 0 :(得分:2)

这是两种不同的类型,指向int的指针不是指向const int的指针。是的,指向int的指针可以转换为指向const int的指针。

这里的问题是,还有一个附加的间接级别,即引用。因此,您有对int*的引用。目标不同于对const int*的引用。

这类似于拥有一个char*,获取指向它的指针并尝试将其传递给const char**。由于内部类型不同,它也会失败。

是的,这可能很烦人。唯一的选择是在获取对它的引用之前设置适当的类型,因此p必须是const int*