-J------ L
sizeof(data)
■*i
Рис. 1.5
Форма обращения к элементам массива с помощью указателей следующая:
• data[0] ==*p;
• data[]==*(p + 1);
• data[2] = *(pl +2);
• data[i == *(p + /);
• data[n-] == *(p + n- 1). Операции над указателями p 1 и/?2:
•p =p2 — проверка на равенство; •p\=pl — проверка на неравенство; •р <р2 — сравнение указателей на меньше; •р <=р2 — сравнение указателей на меньше или равно; •р >р2 — сравнение указателей на больше; •р >=р2 — сравнение указателей на больше или равно; •р2 - pi — вычисление количества элементов между р2 и/Л; •р + i — наращивание указателя на / элементов; •р - i — уменьшение указателя на / элементов.
При работе с указателями и массивами следует внимательно следить за тем, чтобы адреса, хранимые в указателях, не выходили за рамки адресов массивов.
Пример.Связь между указателями и именами массивов
#include <std | io. h> | |
main() { int i; | ||
float data | [5], *p; | |
printf("n | Начальный адрес массива data - %u .", | |
data); | ||
printf("n | Адрес элемента | массива data[0] - %u .", |
&data [0]) ; | ||
printf("n | Адрес третьего | элемента массива - %u .", |
&data [3]) ; | ||
p=data; /* | р= & data [0]; | */ |
for ( i=0; { printf( | i<=4; i=i+l) | |
"п Адрес %d-ro | элемента массива data | |
равен % | a .", i+1, p+i); | |
printf( | "n Значение %d- | -го элемента массива |
data равно %f .", i+1, } } | &data[i]); |
Инициализация массивов
Существует два способа инициализации массива:
1) указание начальных значений при объявлении массива;
2) организация цикла последовательного ввода значений элементов массива.