Циклы. Инициализация массива размерности n случайными целыми положительными значениями от 0 до 32767, страница 3

}

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;          //вывод значений массива через изменение указателя