Nov. 29th, 2007

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

Profile

yorool_gui: (Default)
Michael Ilyin

April 2017

S M T W T F S
      1
2 345678
910 1112131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 23rd, 2025 04:20 pm
Powered by Dreamwidth Studios