Как я сегодня с удивлением узнал, статические двумерные массивы в C++ - это вовсе не двойные указатели. Если мы хотим передать в функцию статический двумерный массив q[100][100], нужно написать void f( double[][100] foo ), а вовсе не void f(double** foo), как я всегда думал. И хранятся они последовательно, строка за строкой, без всяких массивов указателей.
Что еще более странно, так это то, что вот такой код:
выдает
Что еще более странно, так это то, что вот такой код:
void foo( double bar[][100], double baz[100][100] )
{
printf("%d %d\n",sizeof(bar),sizeof(baz));
}
void main()
{
double q[100][100];
foo(q,q);
printf("%d",sizeof(q));
}выдает
4 4 80000т.е. MSVC8 похоже передает массив по ссылке, даже если я вроде бы прошу передать его по значению (baz). Вот этого я пока так и не понял: это особенность MSVC8 или так и надо по стандарту?