}
cout << endl;
return 0;
}
Определение максимального элемента в массиве и его индекса выглядит так:
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <time.h>
void main()
{ const int n=20;
static int array[n];
int i;
srand (time(0));
for (i=0; i<n; i++) array[i]=rand() % 15;
for (i=0; i<n; i++)
cout << setw(6)<< array[i]; //вывод значений элементов массива
cout<<endl<< endl;
int max=array[0], imax=0;
for (i=1; i<n; i++)
if (max < array[i]) { max=array[i]; imax=i;} //поиск максимального и его номера
cout<<"max = "<<max<<" imax= "<<imax<<endl;
imax=0 ; //другим способом поиск максимального!!!
for (i=0; i<n; i++)
imax = array[imax] < array[i] ? i : imax; //поиск номера максимального
cout<<"max = "<< array[imax] <<" imax= "<<imax<<endl; //вывод максимального и его номера
}
Массивы и указатели
Любой массив и индексное выражение можно записать как ссылку и смещение и наоборот:
(a+i) есть &a[i] à *(a+i) – это обращение к элементу массива a[i].
Определения int a[] и int *a эквивалентны и означают, что a – указатель на целое
Доступ к элементам массива можно осуществить при помощи указателя. Имя массива является указателем на его нулевой элемент.
#include <stdio.h>
int a[ ]={10, 20, 30, 40, 50, 60};
main()
{
int i;
//1
for (i=0; i<6; i++)
printf ("a[%d]=%d; %c", i, a[i], (i==2)? '\n': ' ');
printf("\n\n");
//2
int *p;
for (p=&a[0]; p<=&a[5]; p++) //инициализация указателя адресом массива
printf (" *p: %d; %c", *p, ((p==&a[2])? '\n': ' '));
printf("\n\n");
for (p=a+5; p>=a; p--)
printf (" *p: %d; %c", *p, (p==a+3)? '\n': ' ');
printf("\n\n");
for (p=&a[0], i=0; i<6; i++)
printf (" *(p++): %d; %c", *(p++), (p==&a[2])? '\n': ' '); //равносильно *р++
//Внимание!!! (*p)++ увеличивает значение a[i],
printf("\n\n");
//3
for (p=a, i=0; p+i<=a+5; i++) // или for (p=a, i=0; p+i<=a+5; p++)
printf ("*(p+%d) = %d\t %c", i, *(p+i), (i==2)? '\n': ' ');
printf("\n\n");
//4
for (p=&a[0], i=0; i<6; i++)
printf ("p[%d] = %d; %c", i, p[i], (i==2)? '\n': ' ');
printf("\n\n");
for (p=a+5, i=0; i<=5; i++)
printf ("p[-%d] = %d; %c", i, p[-i], (i==2)? '\n': ' ');
printf("\n\n");
//5
for (p=a+5; p>=a; p--)
printf (" a[p-a]: %d; %c", a[p-a], (p==(a+3))? '\n': ' ');
printf("\n\n");
return 0;
}
Результаты вывода:
a[0]=10; a[1]=20; a[2]=30;
a[3]=40; a[4]=50; a[5]=60;
*p: 10; *p: 20; *p: 30;
*p: 40; *p: 50; *p: 60;
*p: 60; *p: 50; *p: 40;
*p: 30; *p: 20; *p: 10;
*(p++): 10; *(p++): 20; *(p++): 30;
*(p++): 40; *(p++): 50; *(p++): 60;
*(p+0) = 10 *(p+1) = 20 *(p+2) = 30
*(p+3) = 40 *(p+4) = 50 *(p+5) = 60
p[0] = 10; p[1] = 20; p[2] = 30;
p[3] = 40; p[4] = 50; p[5] = 60;
p[-0] = 60; p[-1] = 50; p[-2] = 40;
p[-3] = 30; p[-4] = 20; p[-5] = 10;
a[p-a]: 60; a[p-a]: 50;
a[p-a]: 40; a[p-a]: 30;
a[p-a]: 20; a[p-a]: 10;
Вывод элементов массива через указатель
#include <iostream.h>
int main()
{
int intarray[] = { 31, 54, 77, 52, 93 };
int* ptrint;
ptrint = intarray;
for(int j=0; j<5; j++)
cout << *(ptrint++) << endl; //вывод значений массива через изменение указателя
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.