реклама на сайте
подробности

 
 
> sizeof(двумерный массив), то ли лыжи не едут..
demiurg_spb
сообщение Aug 25 2011, 05:32
Сообщение #1


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Код
void show_size(float a[3][3])
{
     printf("sizeof(a)=%d\n",sizeof(a));
}
sizeof(a)=4

Код
void show_size(void)
{
     float a[3][3];
     printf("sizeof(a)=%d\n",sizeof(a));
}
sizeof(a)=36

Это нормально? Мне казалось, что всегда должно быть 3*3*4=36...
Да, компилятор mingw32tdm (gcc-4.5.2).

Похоже он в первом случае возвращает размер указателя. Неожиданно...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ReAl
сообщение Aug 25 2011, 06:01
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(demiurg_spb @ Aug 25 2011, 08:32) *
Похоже он в первом случае возвращает размер указателя. Неожиданно...
Так функции никогда массив не принимали, только указатель на него, просто таким образом описанный.
Прототип Вашей функции с точки зрения компилятора -- void show_size(float (*a)[3]);, т.е. функция принимает указатель на массивы float[3]

Цитата(sergeeff @ Aug 25 2011, 08:53) *
если вы объявите массив в одном модуле, в другом модуле вы уже не будете знать его размеров.
Ну это смотря как описать его в include-файле либо по месту.
Если никак, то он вообще не будет виден в других модулях.
Если
Код
extern float a[][3];
то размер массива будет неизвестен, информация только о размере подмассива.
Если
Код
extern float a[3][3];
то размер будет виден.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 18:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01356 секунд с 7
ELECTRONIX ©2004-2016