Как я сегодня с удивлением узнал, статические двумерные массивы в 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 или так и надо по стандарту?