2015-11-27 4 views
1

Я проверить задание, и я только что нашел это в заголовочном файле, который я должен заполнить в .cpp:Параметр указателя и ссылки?

void setData(const component_t * & data_ptr); // Copy the data from data_ptr to the internal buffer. 
//The function ASSUMES a proper size for the incomming data array. 

Если вам интересно о component_t, это поплавок через typedef.

Итак, мой вопрос в том, какой параметр data_ptr? Как он может быть определен как * и & (как указатель, так и ссылка?).

Спасибо за понимание!

+0

Это ссылка на указатель. См. Здесь: http://stackoverflow.com/questions/28510101/passing-and-assigning-new-value-to-pointer-c – PaulMcKenzie

ответ

4

Параметр data_ptr является ссылкой на указатель на const component_t.

В C и C++ указатель не особо особенный. Это всего лишь число, указывающее на адрес в памяти. Обычно, когда вы передаете T* в качестве параметра, вы передаете значением; то есть число, представляющее адрес памяти, просто копируется, так же, как если бы вы передали int по значению.

В этом случае вы передаете T*& или ссылку на указатель на Т. Но он работает во многом так же, как если бы вы передали int& или ссылку на int: это означает, что вы можете изменить ссылочный объект.

Так что в этом случае можно сказать, что, например

void setData(const component_t * & data_ptr) 
{ 
    data_ptr = new component_t(/* args... */); 
} 

, хотя это не обязательно хороший способ сделать что-то в современном C++.

+0

Спасибо за это. Я бы использовал десятифутовый полюс, чтобы измерить расстояние и держаться подальше от этого;) Но есть ли место, где это особенно полезно, когда мы не можем делать ничего без него? – sjsam

+0

@sjsam 'int readint (char * & bufp) {int x = * bufp ++; x << = 8; x | = * bufp ++; x << = 8; x | = * bufp ++; x << = 8; x | = * bufp ++; return x;} 'или что-то в этом роде. Он выполняет итерацию через буфер, обновляя указатель на буфер при построении 'int'. В конце вы собрали 'int', а bufp указывает на следующее местоположение после' int' в буфере. – user4581301

+0

Спасибо, Тристан. Цените это. – sjsam

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