Одномерные и многомерные массивы.
В программах очень часто приходится обрабатывать большие объёмы однотипных данных. Применять обычные переменные для этого очень неудобно: представьте себе 1000 переменных с разными именами и одинакового типа, которые нельзя обработать в цикле. Эту проблему позволяет решить использование массивов.
Массив– совокупность переменных (элементов) одинакового типа и собщим названием. Доступ к элементам массиваосуществляется простым указанием номера элемента – индекса.
В языке Си нумерация элементов массива начинается с нуля!
Примеры объявления массивов:
int a[10]; // Целочисленный массив a, размер – 10 элементов
double vect[20]; // Массив вещественных чисел vect, в нём 20 элементов
char str[1024]; // Символьный массив на 1024 элемента
При объявлении массива его элементам можно сразу присвоить нужные значения (т.е. инициализировать массив):
int x[5] = {10, 20, 30, 40, 50};
char str[] = “Hello!”; // Автоматическое
int a[] = {1, 2, 3}; // определение размера
Примеры обращения к элементам массива:
a = x[0];
printf(“%d\n”,x[0]);
scanf(“%d”, &x[0]);
Примечания:
1. В памяти компьютера элементы массива располагаются в виде единого блока, друг за другом:
x[0] x[1] x[2] x[3] x[4]
10 20 30 40 50
2. В языке Си нет проверки правильности индекса (т.е. номера элемента). Выход за границы массива чреват непредсказуемыми последствиями.
Как известно, массив- это конечная совокупность данных одного типа. Можно говорить о массивах целых чисел, массивов символов и.т.д. Мы можем даже определить масссив, элементы которого - массивы( массив массивов), определяя, таким образм, многомерные массивы. Любой массив в программе должен быть описан: после имени массива добаляют квадратные скобки [],внутри которых обычно стоит число, показывающее количество элементов массива. Например, запись int x[10]; определяет x как массив из 10 целых чисел. В случае многомерных массивов показывают столько пар скобок , какова размерность массива, а число внутри скобок показывает размер массива по данному измерению. Например, описание двумерного массива выглядит так: int a[2][5];.Такое описание можно трактовать как матрицу из 2 строк и 5 столбцов. Для обрщения к некоторому элементу массива указывают его имя и индекс, заключенный в квадратные скобки(для многомерног массива - несколько индексов , заключенные в отдельные квадратные скобки): a[1][3], x[i] a[0][k+2].Индексы массива в Си всегда начинаются с 0, а не с 1, т.е. описание int x[5];порождает элементы x[0], x[1], x[2], x[3], x[4], x[5].Индекс может быть не только целой константой или целой переменной, но и любым выражением целого типа. Переменная с индексами в программе используется наравне с простой переменной (например, в операторе присваивания, в функциях ввода- вывода). Начальные значения массивам в языке Си могут быть присвоены при компиляции только в том случае, если они объявлены с классом памяти externили static, например:
static int a[6]={5,0,4,-17,49,1};
обеспечивает присвоения a[0]=5; a[1]=0; a[2]=4 ... a[5]=1.Как видите, для начального присвоения значений некоторому массиву надо в описании поместить справа от знака = список инициирующих значений, заключенные в фигурные скобки и разделенные запятыми. Двумерный массив можно инициировать так:
static int matr[2][5] = {{3,4,0,1,2},{6,5,1,4,9}};
Матрица хранится в памяти построчно, т.е. самый правый индекс в наборе индексов массива меняется наиболее быстро.
Пример
#include<stdio.h>
void main(void)
{//демонстрирует работу с одномерным массивом
int mas[]={2,3,1,8,0,3,5,6,8,9};
int temp;
printf("ne otsortirovannij massiv\n");
for(int i=0;i<10;i++)
printf("%d ",mas[i]);
temp;
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
if (mas[i]>mas[j]){
temp=mas[i];
mas[i]=mas[j];
mas[j]=temp;
}
printf("\n\notsortirovannij massiv\n");
for(int i=0;i<10;i++)
printf("%d ",mas[i]);
}
Результат работы программы
Указатели.
Указаетль - это переменная, которая содержит адрес некоторого объекта в памяти компьютера. Понятно, что адрес - целое число. Понимание и правильное использование указателей очень важно для создания хороших программ.
Многие конструкции языка Си требуют применения указателей. Например, указатели необходимы для успешного использования функций и динамического распределения памяти. С указателями следует обращаться очень осторожно. Так использование в программе неинициализированного указателя может привести к "зависанию" компьютера. При неправильном, неаккуратном использовании указателей в программе могут возникнуть ошибки, которые очень трудно бывает обнаружить. Обойтись же без указателей в программах на язке Си нельзя.
3. Объявление указателей в Си. Указатель объявляется следующим образом.
1. Вначале указывается тип указателя. Это некоторый тип языка Си. В данном случае он определяет тип объекта, на который указывает указатель.
2. Вслед за этим через пробел ставится звездочка - *. Она обозначает, что следующая за ней переменная является указателем.
Получается довольно простая формула:
тип *<простая переменная>
Например:
char *ch;
nt *temp, i, *j, *k;
loat *pt, fon;
Здесь указателями являются: ch, temp, j, k pt.
Дата добавления: 2016-04-14; просмотров: 993;