Указатель на массив указателей и указатель на массив

Следует отметить, что с помощью скобок () в языке Си можно создавать указатели разных типов. Существуют указатели на массивы указателей и указатели на массивы заданного типа и заданного числа элементов.

Например:

int ** p1; // Указатель на массив указателей

int (*p2)[10]; // Указатель на массив из 10 элементов типа int

При выполнении арифметических операций с такими указателями будет происходить следующее:

p1++; // Значение адреса увеличится на 4

p2++; // Значение адреса увеличится на 40=4*10 в Win32

Это происходит потому, что при выполнении арифметических операций с указателями за единицу принимается размер объекта в памяти, на который указывает указатель.

В заключение представим пример программы, которая выполняет сортировку элементов массива в порядке неубывания. При сортировке используется алгоритм прямого выбора: в массиве размерности n ищется минимальный элемент, потом минимальный элемент меняется местами с первым элементом, после этого первый элемент будет на своем месте; на следующем шаге рассматривается массив размерности на единицу меньший (без первого элемента) к нему применяется тот же алгоритм, и т.д. Массив в программе создается динамически, размерность вводится с клавиатуры, заполняется случайными числа и выводится на печать до сортировки и после сортировки.

#include <stdio.h>

#include <stdlib.h>

void main()

{

int *pM; // Указатель на массив

int n; // Число элементов массива

printf("n="); scanf("%d", &n); // Ввод числа элементов

// Выделение памяти для массива

pM=(int *)malloc(n*sizeof(int));

// Заполняем массив псевдослучайными числами в интервале 0..99

for(int i=0; i<n; i++) pM[i]=rand() % 100;

// Печатаем исходный массив

for(int i=0; i<n; i++) printf("%d ", pM[i]);

for(int i=0; i<n-1; i++) // Считаем, что массив начинается с i-го

// элемента

{

int imin=i, // Индекс миниамльного элемента

// (считаем минимальным i-ый элемент)

min=pM[i]; // Значение минимального элемента

// Сравниваем выбранный элемент со всеми последующими

for(int j=i+1; j<n; j++)

if (pM[j]<min) // Нашли элемент меньший чем min

{

min=pM[j];

imin=j;

}

// Минимальный элемент меняем с i-m

pM[imin]=pM[i];

pM[i]=min;

}

// Пеачть массива после сортировки

printf("\n"); // Переход на новую строчку

for(int i=0; i<n; i++) printf("%d ", pM[i]);

}

 








Дата добавления: 2015-08-14; просмотров: 586;


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

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

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

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