2013-09-11 3 views
0

это может показаться очень простой вопрос, но я имею немного запутанным ПОНИМАНИЕ этот кусок кода:Передача массива по ссылке в C++

так у меня есть функция, которая принимает аргумент: const char * str1
Теперь, переданный аргумент определяется как: const char (&str1)[5]

Я был бы признателен, если бы вы могли немного разработать, как массив указателей символов определен во 2-й строке?

EDIT:

template<unsigned N, unsigned M> 
int compare(const char (&p1)[N], const char (&p2)[M]){ 
    return strcmp(p1,p2); 
} 

Я пытаюсь понять, как не параметр типа, который, по существу, перевод в строку символов определяется здесь

+3

Не могли бы вы показать фактический прототип функции и сайт вызова? Неясно, что вы имеете в виду. – Useless

+1

Это не массив указателей символов, это ссылка на массив 'char'. – molbdnilo

+0

@molbdnilo, спасибо, поэтому, когда нам нужен указатель на массив, мы можем передать массив по ссылке? – Jason

ответ

1

нет ничего «по существу перевод». Шаблон функции ожидает вызова с двумя аргументами массива.

char s[] = { 'a', 0, 'c' }; 

compare(s, "xyz"); // first argument "s" is a named array, N = 3 
         // second argument is a string literal, M = 4 

Вы можете использовать один и тот же шаблон для любого массива, но особое преимущество для гольцов подобных массивов является то, что вы можете иметь буквенные массивы в виде строковых литералов.

+0

так char A [5] совпадает с char (& A) [5] ?? – Jason

+1

@ Джейсон: Нет. Знаете ли вы, какие ссылки есть? Значения могут привязываться к ссылкам. Значение типа 'char [5]' может связываться с ссылкой типа 'char (&) [5]'. –

+0

Ох спасибо за объяснение, я учусь! его просто синтаксис звучит немного запутанным для меня – Jason

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