Инкрементный указатель на статический выделенный массив

На сколько увеличивается указатель в этих ситуациях и почему?

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]);

выведет первый элемент (целое число) второй "строки" двумерного массива.

Другие вопросы по тегам