Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2017, 00:15   #1
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию Как в Си компилятор интерпретирует [ ]; передача массивов в функцию

Здравствуйте!
Я очень давно не работал с статическим массивами в си. Обычно, когда работал с динамическими массивами, то передавал их в функцию через указатели. У меня все работало и я считал, что разбираюсь в этой теме пока сегодня не столкнулся с передачей двумерных массивов в функцию.

Вот набросал небольшой пример:
Код:
void func( int (*arr)[10] )
{
printf( "%d", *(*(arr + 1) + 1 ) );
}

void main()
{
int arr[ 5 ] [ 10 ];
arr[1][1] = 15;
printf( "%d ", *(*(arr + 1) + 1 ) );
func( arr );
}
Этот код прекрасно работает, но я не понимаю, почему здесь надо взять указатель на arr в скобки: void func( int (*arr)[10] ). Без них это вроде как массив из 10 указателей, а с ними не могу понять что.

Так же если изменить этот код таким образом:
Код:
void func( int **arr)
{
printf( "%d", *(arr + 10 * 1 + 1) );

}

void main()
{
int arr[ 5 ] [ 10 ];
arr[1][1] = 15;
printf( "%d ", *(*(arr + 1) + 1 ) );
func( arr );
}
То все тоже работает. Но непонятно каким образом двумерный массив превращается в одномерный. Понятно, что в памяти все строки статического двумерного массива лежат последовательно, но тогда почему мы используем в мейне такой код для обращения к элементу массива *(*(arr + 1) + 1 ), который соответствует arr[1][1].

Объясните пожалуйста эту магию си. Когда у нас для доступа к элементу массива надо использовать два разыменования, а когда одно?
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблемы с кодом на С++. Компилятор коряво интерпретирует или руки не оттуда растут? Помогите разобраться, пожалуйста. OstapGr Помощь студентам 1 02.07.2014 15:25
С++ Передача массивов в функцию vlad-letchik Помощь студентам 0 10.05.2012 00:29
Передача Property как Var параметр в функцию sdsfy Общие вопросы Delphi 11 21.09.2011 23:01
передача двумерных массивов в функцию Wast Общие вопросы C/C++ 2 04.05.2009 23:04
Передача компонента как параметра в функцию hayhay Microsoft Office Excel 1 11.03.2008 15:53