2016-03-25 2 views
0

У меня есть эта часть в инструкции моего школьного проекта:Использование ЬурейеГо для передачи параметров по ссылке

В hw_numbers.h определить тип hw_number_array (для передачи аргументов функции по ссылке). Чтобы хранить числа в этом массиве, используйте массив unsigned long.

Мой друг дал мне намек, что он должен выглядеть следующим образом:

typedef unsigned long hw_number_array[]; 

Может кто-нибудь объяснить мне, почему я должен использовать это для передачи массива в функцию?
И как этот тип существует даже без определения фактического размера массива?

ответ

0

Если размер массива опущен, это называется массивом неизвестной границы. Есть только определенные места, где это можно использовать, но параметр функции является одним из них. Существует специальное правило, которое говорит, что даже если оценка дается для массива, связанный игнорируется и параметр эквивалентен указателю:

void f(int []) // this means void f(int *) 

C++ унаследовал это правило от C. Некоторые программисты считают его полезным для документируя, что предполагается, что массив передается для параметра в отличие от указателя на одно значение.

При вызове такой функции, то кажется, что вы можете передать массив по ссылке:

{ 
    int a[5]; 
    f(a); // actually passes an int pointer 
} 

Но это на самом деле иллюзия. Массив распадается на указатель, а затем вместо него передается указатель.

0

Вот код, вы можете попробовать:

typedef unsigned long hw_number_array[]; 

int main() 
{ 
    unsigned long myArray[100]; 

    setValue(myArray, 5, 10); 
    unsigned long value = getValue(myArray, 5); 

    return 0; 
} 

unsigned long setValue(hw_number_array a, int index, unsigned long value) 
{ 
    a[index] = value; 
} 


unsigned long getValue(hw_number_array a, int index) 
{ 
    return a[index]; 
} 
Смежные вопросы