2014-11-01 4 views
-1
#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 
} 

Я хочу ссылаться на указатель, поскольку я вижу, что мне разрешено ссылаться на значение, но не указатель, почему?Почему мы не можем ссылаться на указатель, но значения

+0

Ну, вы можете: 'void pointer (int * & ref) {'. Немного непонятно, о чем вы на самом деле просите. –

+1

Это не сбой, это ошибка компиляции. –

+0

, но почему проголосовать, кажется действительный вопрос ?? –

ответ

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; 
} 
+0

Тогда первый вызов ссылки не будет работать! –

+0

Вам нужно оба в этом случае. –

+0

... И вернуть значение из main¬ –

1

Эта линия

reference(i); 

пытается пройти в int * - не в `` int` переменную. Следовательно, он не будет компилироваться.

См сигнатуру функции

1

Прежде всего «аварии» является термин, который вы можете использовать только после получения через компилятор ...

void reference(int &ref) 

Эта функция ссылается на целое число как его параметр, пока вы передаете указатель в целое через

reference(i) 

Изменить подпись вашей функции на что-то вроде: -

void reference(int* &ref) 

для этого вызова на работу. ИЛИ изменить запрос на что-то вроде: -

int i; 
reference(i); 

для выполнения этой функции.

+0

да я имел в виду это только .. какой тип параметров функции я должен использовать для получения ссылки на указатель на int, спасибо –

Смежные вопросы