Пример обращения к 8 - ому элементу3-й строки.
b [3] [8];
Над массивами в С допускается только две операции:
1) Получение адреса массива с помощью операции указатель.
2) Обращение к элементу массива с помощью операции - индексации.
В некоторых реализациях компилятора допускается использование операции sizeof.
Связь между массивами и указателями.
Существует тесная связь между массивами и указателями. Имя массива является указателем const-й и представляет собой стартовый адрес массива.
Пример:
int a [5];
Массив из 5-ти элементов, где а есть адрес нулевого элемента (& a[0]).
Пример: В массив заносятся элементы от 1 до 12, после чего выводится массив на экран.
# include <stdio h>
int main (void )
{ int t, i, num [3] [4];
/* загрузка чисел */
for (t=0, t<3; ++t);
for (i=0, i<4, ++i);
num [t] [i] = (t*4)+i+1;
/* вывод чисел */
for ( t=0; t<3, ++t) {
for ( i=0; i<4, ++i)
printf ( " % d ", num [t] [i]);
printf ( " \n ");
}
}
В C есть правила работы с указателями. Если к указателю прибавляется целое, компилятор автоматически масштабирует целое, умножая его на число байтов соответствующих типу, указанному в определении указателя. Любое действие, которое достигается индексированием массива, может быть выполнено с помощью указателей, причем быстрее с помощью указателей. Возможно размещение в памяти массива а.
1000 1002 1004 1006 1008-адрес
A[0] | A[1] | A[2] | A[3] | A[4] |
Символическое обозначение адреса 1000 в массиве - это а. К третьему элементу массива можно обратиться с помощью операции индексации (а [2]). Существует другой способ обращения к третьему элементу массива а. Это использование стартового адреса массива и операции сложения указателя с константой. Выражение: а+2 дает значение адреса 1004 (1000 + 2 * 2). Взяв значение по этому адресу можно добраться до третьего элемента массива а, т.е. *(а+2). Следовательно, обратиться, например, к i-тому элементу массива а можно с помощью выражения а [i] или *(а+i). Оба способа эквивалентны, но второй быстрее.
Пример вариантов вывода элементов массива
# (include <stdio.h>
int a[] = {10;20;30;40;50;60};
/ * объявление и инициализация массива * /
main ( )
{ int i, * p )
for ( i=0, i< 6; i++)
printf ( " a [% d] = % d, % c, i, a [i] (i= =2)?'\ n':'__');
printf ( " \ n \ n ");
for ( p = & a [o]; p < = & a [5]; p++ )
printf ( " значение * p % d; % c", * p, (p = = & a [2] ) ? '\ n'; '__');
printf ( " \ n \ n " );
for ( p = & a [0], i = 0, i < b; i++ )
printf ( " p [ % d ] = % d; % c", i, p [i], (i= =2)?'\ n':'__');
printf (" \ n \ n");
for ( a = 0, i = 0, p+i < = a+4; p++, i++)
printf ( " * ( p + % d ) = % d \ t ", i, * (p + i ) );
printf ( " n \ n " );
/ * вывод на печать 2-го, 4-го элемента М* /
}
Результат работы.
a[0]=10; a[1]=20; a[2]=30; a[3]=40; a[4]=50; a[5]=60
_____________________________________________________________
Значение * р:10; значение * р:20; значение * р:30; значение * р:40;
значение * р:50; значение * р:60;
───────────────────────────────────────────
р[0]=10; p[1]=20; p[2]=30; p[3]=40; p[4]=50; p[5]=60;
───────────────────────────────────────────
* [p+0]=10 * (p+1)=30 * (p+2)=50
───────────────────────────────────────────
Операция р++ увеличивает значение указателя на единицу. Если р=&a[i],то после операции р++, р содержит адрес элемента а[i+1].
Дата добавления: 2016-04-14; просмотров: 489;