Инкрементный указатель на статический выделенный массив
На сколько увеличивается указатель в этих ситуациях и почему?
void f(int a[])
{
a++;
printf("%d", *a);
}
void g(int a[][M])
{
a++;
printf("%d", *a[0]);
}
Допустим, что в main
У меня есть статический распределенный массив с n элементами и статическая распределенная матрица (2D-массив) с n строками и M столбцами, и я вызываю функции f и g (я не мог написать это в коде, потому что я не смог опубликовать вопрос с много кода и почти нет текста).
1 ответ
В обоих случаях указатели увеличиваются только один раз.:)
a++;
Их значения изменяются размером объектов, на которые они указывают. Таким образом, значение первого указателя изменяется на sizeof( int )
и значение второго указателя изменяется на sizeof( int[M] )
Принять во внимание этот параметр int a[][M]
настроен на int ( *a )[M]
Таким образом, в пределах функций оба указателя будут указывать на вторые элементы массивов. Для двумерного массива его элементом является одномерный массив. И это утверждение
printf("%d", *a[0]);
выведет первый элемент (целое число) второй "строки" двумерного массива.