Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Массивы указателей

Читайте также:
  1. Допускается ли установка двух указателей уровня на соединительной трубе (колонке)?
  2. Массивы данных
  3. Список указателей на Шестой Луч
  4. Укажите, что применяют для деления массива на подмассивы

Указатели и массивы

Массив – это набор пронумерованных однотипных данных.

Синтаксис определения массива:

 

спецификатор_типа array[константное_выражение];

 

В определении массива array – имя массива, константное_выражение – ко-

личество элементов в массиве, спецификатор_типа – тип элементов в масси-

ве. Все элементы массива пронумерованы, начиная с нуля.

При определении массива его элементы можно инициализировать сле-

дующим образом:

 

спецификатор_типа array[ ]={ значение1,значение2, …, значениеN };

 

В фигурных скобках { } через запятую перечисляются значения элемен-

тов массива соответствующего типа.

В языке СИ между указателями и массивами существует некоторая связь.

Когда объявляется массив, то его имя отождествляется с константой, значение

которой равно адресу нулевого элемента массива.

 

Пример определения и использования массива.

 

int array[5]={2, 8, 45, 16, 12}; /* Определение и инициализация массива */

int *ptr; /* Определение указателя */

ptr=&array[0]; /* Присваивание адреса нулевого элемента массива

указателю ptr */

 

Указатель ptr устанавливается на адрес нулевого элемента масcива, при-

чем присваивание ptr=&array[0] можно записать в эквивалентной форме

ptr=array.

Между именем массива и указателем, выступающим в роли имени масси-

ва, существует важное различие. Указатель – это переменная, поэтому допус-

тима операция изменения ее значения: ptr=array или ptr++. Но имя массива не

является переменной, и записи типа array =ptr или array++ ошибочны.

Многомерные массивы так же часто используются, как и одномерные. Вот примеры: в школьных журналах написаны Фамилия и класс; любые базы данных; Вообще, многомерные массивы - это массивы массивов. Т.е. каждый индексный номер содержит массив. Вот пример уже из языка Си:

int i[2][4] = {{1,2,3,4}, {5,6,7,8}};

Т.е. тут мы создаем двумерный массив размером 2х4. Т.е. 2 строчки по 4 элемента каждая.

В принципе, остальное тут так же. Давайте теперь рассмотрим, как в многомерном массиве вводить и выводить элементы:

#include <conio.h>
#include <stdio.h>

int main()
{
int arr[2][4];

for (int i = 0; i < 2; i++){
for (int j = 0; j < 4;j++){
scanf ("%d", &arr[i][j]);
}
}
for (int i = 0; i < 2; i++){
for (int j = 0; j < 4;j++){
printf ("%d ", arr[i][j]);
}
printf ("\n");
}
getch();

return 0;
}

Все очень похоже на одномерный массив. Только в многомерном массиве мы создаем двойной цикл, первый - это проход по столбцу, а второй - это проход по элементам массива (идем по строке).

Во всех моих примерах при изменении размера многомерного массива, например вместо arr[2][4], хочу сделать arr[7][6]. Так вот, что бы сделать такое изменения придется изменять абсолютно все циклы, так как они ориентируются по старым данным. Но есть способ исправить эту проблему.

Для этого в языке С/C++ есть директива предпроцессора define. Давайте рассмотрим его на примере:

#include <conio.h>
#include <stdio.h>

#define SIZE_A 2
#define SIZE_B 2

int main()
{
int arr[SIZE_A][SIZE_B];

for (int i = 0; i < SIZE_A; i++){
for (int j = 0; j < SIZE_B;j++){
scanf ("%d", &arr[i][j]);
}
}
for (int i = 0; i < SIZE_A; i++){
for (int j = 0; j < SIZE_B;j++){
printf ("%d ", arr[i][j]);
}
printf ("\n");
}
getch();

return 0;
}

Т.е. мы можем поменять значения только в одном месте, и они автоматом поменяются во всех остальных местах. Причем подстановка будет происходить на этапе компиляции

Осталось научиться передавать многомерные массивы в функцию. Вот как это делается:

void printArr (int arr[][2]){ //тело; }

Тут обязательным условием является написание во втором индексе количества элементов, иначе компилятор выдаст ошибку. Ах да, вызывается функция из программы, так же как и одномерный массив:

printArr(arr);

Вот и все, что хотелось вам рассказать о многомерных массивах. Лучше всего любой материал по программированию запоминается на практике.


Дата добавления: 2015-12-08; просмотров: 38 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.008 сек.)