Указатель на массив указателей и указатель на массив
Следует отметить, что с помощью скобок () в языке Си можно создавать указатели разных типов. Существуют указатели на массивы указателей и указатели на массивы заданного типа и заданного числа элементов.
Например:
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;