Массив указателей

CCBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В программировании на C массив указателей - это массив, каждый элемент которого является указателем на другой тип данных, например, int, char, float и т.д. В этом практическом занятии мы узнаем, как обращаться к массиву указателей на целые числа и массиву указателей на символы.

Массив указателей на целые числа

В этом шаге мы будем обращаться к массиву указателей на целые числа. Откройте файл main.c в директории ~/project/ и вставьте следующий код:

#include <stdio.h>

// Глобальное объявление.
const int MAX = 5;

int main() {
  printf("\n\n\t\t==== Массив указателей на целые числа ====\n\n\n");

  int var[] = {10, 20, 30, 40, 50}; // инициализация массива(здесь var) указателей на int
  int i = 0;

  /*
      ptr - это массив указателей на int, то есть
      он хранит адрес каждого элемента массива
  */
  int *ptr[MAX];

  for(i = 0; i < MAX; i++) {
    /*
        Назначьте адрес каждого элемента массива
        элементу массива ptr
    */
    ptr[i] = &var[i];
  }

  for(i = 0; i < MAX; i++) {
    /*
        ptr[i] хранит адрес элемента var[i].
        Следовательно, *ptr[i] возвращает значение элемента,
        хранящегося в месте ptr[i]
    */
    printf("Value of var[%d] = %i\n\n", i, *ptr[i]);
  }

  printf("\n\n\t\t==== Конец программы ====\n\n\n");
  return 0;
}

Эта программа инициализирует массив указателей на целые числа и назначает адрес каждого элемента массива массиву указателей. Затем она выводит значение каждого элемента с использованием массива указателей.

Массив указателей на символы

В этом шаге мы будем обращаться к массиву указателей на символы. Вставьте следующий код после кода предыдущего шага:

#include <stdio.h>

// Глобальное объявление.
const int MAX = 4;

int main() {
  printf("\n\n\t\t==== Массив указателей на символы ====\n\n\n");

  char *names[] = {"Google", "Amazon", "Facebook", "Apple"}; // инициализация массива(здесь names) указателей на char
  int i = 0;

  for(i = 0; i < MAX; i++) {
    printf("Value of names[%d] = %s\n\n", i, names[i]);
  }

  printf("\n\n\t\t==== Конец программы ====\n\n\n");
  return 0;
}

Эта программа инициализирует массив указателей на символы и назначает адрес первого символа каждой строки массиву указателей. Затем она выводит полное имя каждого элемента с использованием массива указателей.

Компиляция и запуск программы

В этом шаге мы скомпилируем и запустим программу. Откройте терминал и перейдите в директорию ~/project/. Введите следующую команду для компиляции программы:

gcc main.c -o main

После успешной компиляции введите следующую команду для запуска программы:

./main

Эта команда выполнит программу и покажет вывод в терминале:

		==== Массив указателей на целые числа ====


Value of var[0] = 10

Value of var[1] = 20

Value of var[2] = 30

Value of var[3] = 40

Value of var[4] = 50


		==== Массив указателей на символы ====


Value of names[0] = Google

Value of names[1] = Amazon

Value of names[2] = Facebook

Value of names[3] = Apple


		==== Конец программы ====

Полный код

#include <stdio.h>

// Глобальное объявление.

const int MAX = 5;

int main() {
  printf("\n\n\t\t==== Массив указателей на целые числа ====\n\n\n");

  int var[] = {10, 20, 30, 40, 50}; // инициализация массива(здесь var) указателей на int
  int i = 0;

  /*
      ptr - это массив указателей на int, то есть
      он хранит адрес каждого элемента массива
  */
  int *ptr[MAX];

  for(i = 0; i < MAX; i++) {
    /*
        Назначьте адрес каждого элемента массива
        элементу массива ptr
    */
    ptr[i] = &var[i];
  }

  for(i = 0; i < MAX; i++) {
    /*
        ptr[i] хранит адрес элемента var[i].
        Следовательно, *ptr[i] возвращает значение элемента,
        хранящегося в месте ptr[i]
    */
    printf("Value of var[%d] = %i\n\n", i, *ptr[i]);
  }

  printf("\n\n\t\t==== Массив указателей на символы ====\n\n\n");

  char *names[] = {"Google", "Amazon", "Facebook", "Apple"}; // инициализация массива(здесь names) указателей на char
  i = 0;

  for(i = 0; i < MAX; i++) {
    printf("Value of names[%d] = %s\n\n", i, names[i]);
  }

  printf("\n\n\t\t==== Конец программы ====\n\n\n");
  return 0;
}

Резюме

В этом практическом занятии мы научились обращаться к массиву указателей на целые числа и массиву указателей на символы. Массив указателей - это массив, в котором каждый элемент является указателем на другой тип данных. Мы узнали, как инициализировать массив указателей, как назначить адреса элементов массива массиву указателей и как обращаться к элементам массива с использованием массива указателей.