Menu
Coddy logo textTech

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

Часть раздела Logic & Flow путешествия по C на Coddy — урок 7 из 63.

Массивы и указатели в C имеют особую связь, которая принципиально важна для понимания того, как C работает с данными в памяти. Когда вы объявляете массив, само имя массива выступает в качестве константного указателя на первый элемент массива.

Это означает, что когда у вас есть массив вида 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] дают абсолютно один и тот же адрес в памяти. Имя массива — это просто более удобный способ ссылаться на адрес первого элемента без необходимости использовать оператор взятия адреса.

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

challenge icon

Задание

Легко

Напишите программу на C, которая демонстрирует эквивалентность между именами массивов и указателями на их первые элементы. Ваша программа должна:

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

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

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

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

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

#include <stdio.h>

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

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

Все уроки раздела Logic & Flow