为什么我们不能引用指针而是值

时间:2014-11-01 08:12:43

标签: c++ pointers reference

#include <iostream>

using namespace std;

void reference(int &ref){
    cout << ref << endl;
}

void pointer(int *ref){
    cout << *ref << endl;
}

int main(){
    int *i = new int[1];
    *i = 10;
    reference(*i);  // fine
    reference(i);   // why not compiling!!! why not referencing to my pointer??
    pointer(i);     // fine
}

我想引用一个指针,因为我可以看到我被允许引用值而不是指针,为什么?

3 个答案:

答案 0 :(得分:1)

这一行

 reference(i); 

试图传入int * - 而不是``int`变量。因此不会编译。

查看功能的签名

答案 1 :(得分:1)

int*类型的对象无法自动转换为int&

我认为你正在寻找类似的东西:

void reference(int& ref){
    cout << ref << endl;
}

void reference(int*& ref){
    cout << *ref << endl;
}

然后,你可以使用两者:

int main(){
    int *i = new int[1];
    *i = 10;
    reference(*i);
    reference(i);
    return 0;
}

答案 2 :(得分:1)

首先,“崩溃”这个术语只有在通过编译器后才能使用......

void reference(int &ref)

当您通过

传递指针时,此函数将引用整数作为其参数
reference(i)

将您的功能签名更改为: -

void reference(int* &ref)

此通话工作。或者将调用更改为: -

int i;
reference(i);

让这个功能起作用。