В других ответах уже говорилось о том, что массив не может быть передан в качестве аргумента и распадается на указатель.
Однако я однажды нашел способ в C ++ передать массив по его «истинному» типуиспользуя ссылку (или постоянную ссылку, если требуется неизменность):
#include <iostream>
void ausgabe1D_A(double (&ary1D)[4]){
// prove type
std::cout << "Is it really still an array? "
<< (sizeof ary1D == sizeof (double[4]) ? "Yes! :-)" : "No. :-(")
<< '\n';
for (int i = 0; i < 4; i++)
std::cout << ary1D[i] << " ";
}
int main()
{
double ary1D[4] = {1.1, 2.2, 3.3, 4.4};
ausgabe1D_A(ary1D);
}
Вывод:
Is it really still an array? Yes! :-)
1.1 2.2 3.3 4.4
Живая демоверсия на coliru
На самом деле, это похоже на подход OP, за исключением того, что я использую ссылку вместо указателя. Имея это в виду, я подумал, что должна быть возможность исправить подход ОП (игнорируя его полезность), и придумал:
#include <iostream>
void ausgabe1D_A(double (*ptr1D)[4]){
double *p = &(*ptr1D)[0];
for (int i = 0; i < 4; i++)
std::cout << p[i] << " ";
}
int main()
{
double ary1D[4] = {1.1, 2.2, 3.3, 4.4};
ausgabe1D_A(&ary1D);
}
Вывод:
1.1 2.2 3.3 4.4
Демонстрация в реальном времени на coliru
Et voilà.