Menu
Coddy logo textTech

Имена массивов как указатели

Часть раздела Логика и управление потоком путешествия по C на Coddy. Урок 7 из 63.

Массивы и указатели в C имеют особую взаимосвязь, которая fundamental для понимания того, как C работает с data в памяти. Когда вы объявляете массив, его имя array само действует как постоянный pointer на first element массива.

Это означает, что когда у вас есть массив, такой как int numbers[5];, имя numbers по сути является указателем, который всегда указывает на numbers[0]. Можно считать имя массива встроенным указателем, который не нужно объявлять отдельно.

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' points to the first element
// numbers == &numbers[0]  // Они эквивалентны!

Это равенство имеет решающее значение: numbers и &numbers[0] оба дают один и тот же точный адрес памяти. Имя array — это просто более удобный способ обратиться к адресу элемента first, не используя оператор взятия адреса.

Понимание этой взаимосвязи открывает путь к использованию методов работы с указателями вместе с массивами, что может сделать ваш код более гибким и эффективным. Ключевое различие заключается в том, что, в отличие от обычных указателей, имена массивов являются постоянными указателями — вы не можете изменить объект, на который они указывают.

challenge icon

Задание

Легко

Напишите программу на C, демонстрирующую эквивалентность имён array и указателей на их first elements. Ваша программа должна:

  1. Объявить integer array с именем numbers, содержащий 4 элемента, и инициализировать его значениями {10, 20, 30, 40}
  2. Объявить pointer на integer с именем ptr
  3. Присвоить имя array numbers указателю ptr
  4. Вывести address, хранящийся в numbers, используя printf со спецификатором формата %p
  5. Вывести address first element &numbers[0], используя printf со спецификатором формата %p
  6. Вывести address, хранящийся в ptr, используя printf со спецификатором формата %p
  7. Вывести значение first element, используя имя array: *numbers
  8. Вывести значение first element, используя pointer: *ptr

Ваш вывод должен отображать результаты в следующем формате:

Array name address: [address]
First element address: [address]
Pointer address: [address]
Value via array name: 10
Value via pointer: 10

Это задание демонстрирует, что имя array действует как постоянный pointer на first element и что numbers, &numbers[0] и ptr содержат один и тот же адрес памяти, когда ptr присвоено имя array.

Попробуйте сами

#include <stdio.h>

int main() {
    // TODO: Напишите ваш код здесь
    // 1. Объявите и инициализируйте массив 'numbers' значениями {10, 20, 30, 40}
    // 2. Объявите указатель на целое число с именем 'ptr'
    // 3. Присвойте имя массива указателю
    // 4. Выведите все требуемые адреса и значения
    
    return 0;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор C