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

 
 
> 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
Ответов
sergeeff
сообщение Aug 25 2011, 05:53
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Про это во всех учебниках написано. При передачи массива в функцию фактически передается указатель на массив, что вам и показывает sizeof(). Аналогично, если вы объявите массив в одном модуле, в другом модуле вы уже не будете знать его размеров.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Aug 25 2011, 07:15
Сообщение #3


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

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



Спасибо за комментарии!
Цитата(sergeeff @ Aug 25 2011, 09:53) *
Про это во всех учебниках написано.
Я прекрасно знаю что всегда передаётся лишь указатель на массив.
Вопрос был в другом. Привычный синтаксис взятия размера массива тут не работает, что не является очевидным.
Нужно это запомнить. Ключевая фраза тут:
Цитата(ReAl @ Aug 25 2011, 10:01) *
указатель ... таким образом описанный.

Цитата(ReAl @ Aug 25 2011, 10:01) *
Прототип Вашей функции с точки зрения компилятора -- void show_size(float (*a)[3]);

Так писать слишком мозг устаёт. Я то ведь хотел красиво написать и, думаю, что получилось. Единственное накололся на взятии размера.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



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

 


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


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