Предположим, у меня есть функцияВопросы по типу массива
void function(double p[2]) {
cout << p[0] << " " << p[1] << endl;
}
Если я пытаюсь что следующий код
double a[1] = {1};
double b[2] = {2, 3};
double c[3] = {4, 5, 6};
function(a);
function(b);
function(c);
я получаю что-то вроде
1 2.0778e-317
2 3
4 5
Другими словами, 2
, кажется, полностью игнорируется, и все 3 массива все равно передаются функции.
Являются ли следующие точно такими же?
void function(double p[2])
void function(double p[])
void function(double *p)
Если они есть, есть ли способ, чтобы сделать функцию, которая будет принимать только массив определенной длины или, по крайней мере, определенной длины? Я прошу, чтобы типы a
, b
и c
оказались разными. (Вы получаете разные результаты для typeid(a).name()
и typeid(b).name()
например).
Чтобы избежать распада вы можете получить ссылку на массив или указатель на массив, но это странно, в C++: 'недействительными функции (двойной (& р) [2]),' аннулируются функция (двойной (* р) [2]) '. – rodrigo
@rodrigo Как я могу назвать эти функции с помощью 'b'? –
Эталонная функция будет просто 'function (b)' и указателем one 'function (& b)'. Но если вы хотите передать 2 первых значения аргумента 'c' в качестве аргумента (что опытный разработчик C++ захочет сделать), вам придется делать некоторые неприятные броски. – rodrigo