На этом шаге мы рассмотрим несколько примеров совместного использования
указателей и массивов.
#include<iostream.h>
int a[5],*uk;
main ()
{
uk = &a[0];
cin >> *(uk) >> *(uk+1) >> *(uk+2) >> *(uk+3) >> *(uk+4);
cout << *(uk) << " " << *(uk+1) << " " << *(uk+2) << " "
<< *(uk+3) << " " << *(uk+4);
}
#include<iostream.h> main () { int u,y,s,a[20],*ukazatel=&a[0]; /* ---------------------- */ for (int w=0; w<=5; w++) { cout << "\n Вводите элемент массива... "; cin >> *(ukazatel+w); } u = y = *ukazatel; for (w=0; w<=5; w++) { if (y<=*(ukazatel+w)) y = *(ukazatel+w); else if (u>=*(ukazatel+w)) u = *(ukazatel+w); } cout << y-u << endl; }
#include<iostream.h> main () { int a[20],*ukazatel = &a[0]; for (int w=0; w<=3; w++) { cout << "Введите очередной элемент массива: "; cin >> *(ukazatel+w); } int y = 0; for (w=0; w<=3; w++) y = y + *(ukazatel+w); cout << "Среднее арифметическое = " << float(y)/w; }
#include<iostream.h> main () { int a[20],*ukazatel = &a[0]; cout << "Программа выводит последнее число, меньшее 3" << endl; for (int w=0; w<=3; w++) { cout << "Вводи число... "; cin >> *(ukazatel+w); } cout << "\n Элемент: "; int y = 3,f=0; for (w=3; w>=0; w--) if (y > *(ukazatel+w)) { cout << *(ukazatel+w); f=1; break; } if (!f) cout << "таких элементов нет."; }
#include<iostream.h> #define n 10 main () { char m[n],*p=m,temp; /* ------- */ cout << "\n Вводи " << n << " символов для сортировки" << endl; for (unsigned i=0; i> *(m+i); cout << "\n Исходный массив m[i],i=1," << n << ":\n"; for (i=0; i<n; i++) cout << *(p+i); cout << "\n Начало сортировки:\n"; for (unsigned k=0; k<n-1; k++) { for (i=k+1; i<n; i++) if (*p>*(m+i)) { temp = *p; *p = *(m+i); *(m+i) = temp; } p++; } cout << "\n"; cout << "\n Упорядоченный массив m[i],i=1," << n << ":\n"; cout << "(распечатка с использованием *(m+i))\n"; for (i=0; i<n; i++) cout << *(m+i) << ","; cout << "\n Упорядоченный массив m[i],i=1," << n << ":\n"; cout << "(распечатка с использованием *(p+i))\n"; for (i=0; i<n; i++) cout << *(p+i) << ","; }
Результат работы программы:
Вводи 10 символов для сортировки fywaproldv Исходный массив m[i],i=1,10: f,y,w,a,p,r,o,l,d,v, Начало сортировки: Упорядоченный массив m[i],i=1,10: (распечатка с использованием *(m+i)) a,d,f,l,o,p,r,v,w,y, Упорядоченный массив m[i],i=1,10: (распечатка с использованием *(p+i)) y, ,н, , ,ц,Ь,у, ,о,
В конце программы упорядоченный массив m[] распечатывается дважды, причем второй вариант (с обращением к элементам массива *(p+i)) является ошибочным, поскольку указатель p на массив m[] изменялся в цикле (конструкция p++;) и к рассматриваемому моменту указывает уже не на начало массива m, а на его последний элемент.
#include<iostream.h> int a[] = { 0,1,2,3,4 }; main () { int *p; for (int i=0; i<=4; i++) cout << "a[" << i << "]=" << a[i] << " "; /* Печать 1 */ cout << endl; for (p=&a[0]; p<=&a[4]; p++) cout << "*p=" << *p << " "; /* Печать 2 */ cout << endl; for (p=&a[0],i=1; i<=5; i++) cout << "p[" << i << "]=" << p[i] << " "; /* Печать 3 */ cout << endl; for (p=a,i=0;p+i<=a+4;p++,i++) cout << "*(p+" << i << ")=" << *(p+i) << " "; /* Печать 4 */ cout << endl; for (p=a+4; p>=a; p--) cout << "*p=" << *p << " "; /* Печать 5 */ cout << endl; for (p=a+4,i=0; i<=4; i++) cout << "p[" << 4-i << "]=" << p[-i] << " "; /* Печать 6 */ cout << endl; for (p=a+4;p>=a;p--) cout << "a[" << p-a << "]=" << a[p-a] << " "; /* Печать 7 */ cout << endl; }
На следующем шаге мы остановимся более подробно на массивах указателей.