Массивы и указатели являются одними из самых фундаментальных структур данных в языке C. Они позволяют нам создавать гибкие и простые в управлении программы, используя всего несколько строк кода.
Большинство из нас знакомо с созданием массивов с такими типами данных, как целые числа, символы или числа с плавающей запятой. Это руководство покажет вам, как создать массив указателей и использовать его для хранения данных.
Как создать массив
Мы можем определить массив как набор элементов. Например, в массиве можно хранить имена 100 человек и тому подобное.
Чтобы объявить массив в C, мы используем синтаксис:
dataType arrName[arrSize];
Здесь dataType относится к типу массива, который может быть целым числом, числом с плавающей запятой, символом или указателем.
ArrName относится к имени, данному массиву, которое может быть любым описательным термином для переменной, если оно подчиняется правилам именования переменной в C.
Наконец, arrSize относится к общему количеству элементов для хранения в массиве. Это значение является постоянным и неизменным после объявления.
Например, мы можем определить массив целых чисел для хранения 10 значений как:
int myarray[10];
Мы также можем определить и инициализировать массив в той же строке. Например, чтобы определить приведенный выше массив и заполнить его необходимыми значениями, мы можем:
int myarray[10] = {1,2,3,4,5,6,7,8,9,10};
Мы также можем сделать то же самое без явного указания размера массива. Рассмотрим пример ниже:
int myarray[] = {1,2,3,4,56,7,8,9,10};
Чтобы получить доступ к элементам в массиве, мы используем метод индексации, указав имя массива, за которым следует индекс элемента, к которому мы хотим получить доступ.
Например, чтобы получить доступ к элементу с индексом 5, мы можем сделать
printf(“%d”, myarray[5]);
В этом случае он должен вернуть 6- й элемент в массиве, потому что индексирование массива начинается с 0. Следовательно, первый элемент имеет значение 0, второй элемент — 1 и так далее.
Мы также можем использовать описанный выше метод для изменения значений в массиве.
Вот пример:
myarray[5] = 5;
Приведенный выше оператор изменит значение массива с 5 на 5.
Указатели C
Указатели — это переменные, которые мы можем использовать для хранения адресов значений в программе. Например, когда вы определяете переменную, ей назначается адрес памяти, к которому вы можете получить доступ, используя
& varname;
Например:
int i = 10;
printf(“%p”, &i);
В приведенном выше коде должен быть указан адрес переменной «i». Обратите внимание, что этот адрес может изменяться каждый раз при запуске программы.
Вот примерный адрес:
0061FF1C
Объявление указателя
Чтобы объявить указатель в C, мы используем тип, за которым следует звездочка и имя переменной.
Например:
int *ptr, i;
Чтобы назначить адрес указателю, мы можем:
int i = 10;
ptr = &i;
В приведенном выше примере мы устанавливаем адрес переменной «i» равным * ptr.
int *ptr, i;
i = 10;
ptr = &i;
printf(«%p», *ptr);
Доступ к значениям из указателя
Мы можем получить доступ к значениям, хранящимся в адресе указателя, используя обозначение звездочки (*). Например:
int *ptr, i;
i = 10;
ptr = &i;
printf(«%d», *ptr);
В этом случае мы получаем конкретное сохраненное значение, а не адрес значения.
Массив указателей
Поскольку мы создали массив целочисленных значений в приведенных выше примерах, мы можем создать массив указателя — в основном, массив, в котором хранятся адреса памяти.
Для этого мы можем использовать синтаксис:
int *ptrarray[10];
В этом примере у нас есть массив из 10 целочисленных указателей, позволяющий хранить адреса памяти 5 целочисленных переменных.
Например, у нас может быть простой код ниже:
#include <stdio.h>
int main() {
int *ptrarray[4];
int w = 100, x = 200, y = 300, z = 400;
ptrarray[0] = &w;
ptrarray[1] = &x;
ptrarray[2] = &y;
ptrarray[3] = &z;
for (int i = 0; i< 4; i++) {
printf(«The value %d has the adddress %d\n«, *ptrarray[i], ptrarray[i]);
}
return 0;
}
После того, как мы скомпилируем и запустим приведенный выше код, мы должны получить результаты, аналогичные приведенным ниже:
The value 100 has the adddress 6422280
The value 200 has the adddress 6422276
The value 300 has the adddress 6422272
The value 400 has the adddress 6422268
Используя этот метод, мы можем получить доступ как к адресам, так и к значениям, хранящимся в указателе массива.
Заключение
В этом кратком руководстве мы обсудили, как использовать массивы и указатели на языке C. Мы также обсудили, как создать массив указателей для хранения адресов для различных значений.