Пример обращения к 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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.