Лабораторная работа: Массивы и указатели в языке программирования Си
{40,50,60},
{70,80,90}};
При инициализации число элементов можно не указывать, т.к. в этом случае оно может быть вычислено по количеству присваиваемых значений (в фигурных скобках), например:
int a[] = {10,20,30,40,50};
Указатели
Указатели и одномерные массивы
Указатель – это переменная, которая содержит адрес переменной. Так как указатель – это адрес некоторого объекта, то через него можно обращаться к данному объекту.
В СИ существует тесная связь между указателями и массивами. Любой доступ к элементу массива, осуществляемый операцией индексирования, может быть выполнен при помощи указателя.
Декларация
int a[10];
определяет массив а размера 10, т.е. блок из десяти последовательных объектов, представленных на рисунке, с именами a[0], a[1], … ,a[9].
Запись a[i] отсылает нас к i-му элементу массива. Если ра есть указатель, т.е. определен как int *pa;, то в результате присваивания
pa = &a[0];
pa будет указывать на нулевой элемент массива а; иначе говоря, ра будет содержать адрес элемента a[0] (см. рис.). Теперь присваивание
x=*pa;
будет копировать содержимое а[0] в х.
Если ра указывает на некоторый элемент массива, то ра+1 по определению указывает на следующий элемент (см. рис.).Таким образом, если ра указывает на a[0], то *(ра+1) есть содержимое a[1], ра+1 – адрес a[1], *(ра+i) – содержимое a[i].
Поскольку имя массива есть не что иное как адрес его начального элемента, присваивание
pa=&a[0];
можно также записать в следующем виде:
pa = a;
Так как ра – указатель , то в выражениях его можно использовать с индексом, то есть запись pa[i] эквивалентна записи *(pa+i). Элемент массива одинаково разрешается изображать и в виде указателя со смещением, и в виде имени массива с индексом.
Между именем массива и указателем, выступающим в роли имени массива, существует одно различие. Указатель – это переменная, поэтому можно написать pa=a или pa++. Но имя массива не является переменной, и запись типа a=pa не допускается. Следует также различать выражения *(a+2) и *a+2: *(а+2) – значение третьего элемента массива а; *а+2 – добавление числа 2 к значению первого элемента массива.
Пример 4. Вывести значения одномерного массива обычным способом и с использованием указателей.
#include <stdio.h>
int a[6]={10,20,30,40,50,60};
/*объявление и инициализация массива*/
main ()