Указателем называется переменная, содержимым которой является адрес другой переменной определенного типа.
При описании указателя обязательно определяется, на данное какого типа он указывает:
int *p;
double *t;
Для получения адреса переменной используется операция раскрытия указателя & :
int a;
int* p;
p=&a;
Для получения указателя на массив достаточно приравнять указатель имени массива:
long mas1[10]={0};
long* p=mas1;
Любой указатель ссылается на неограниченную в обе стороны область памяти, заполненную переменными указуемого типа. Поэтому, получив адрес 0-го элемента ( p=mas1), легко получить адрес 5-того: р+5. Значение mas1[5] при этом можно получить таким образом: *(p+5)
Пример работы с массивом с помощью указателя и ввода-вывода массива из (в) файла:
#include <fstream>
#include <iostream>
using namespace std;
void main()
{
ifstream input("test.txt");
long mas1[10]={0};
long* p=mas1;
long s=0;
for(int i=0; i<10;i++) input>>mas1[i]; // ввод из файла test.txt
for(int i=0; i<10;i++) cout<<*(p+i)<<" "; // вывод массива на экран с помощью указателя
for(int i=0; i<10;i++) s+=*(p+i); // работа с массивом
cout<<s<<" s="<<s<<endl;
ofstream output("prim.txt");
for(int i=0; i<10;i++) output<<mas1[i]; // вывод в файл prim.txt
}
По аналогии решите задачи:
1. Напишите программу в которой нужно
2. Напишите программу в которой нужно:
При описании указателя обязательно определяется, на данное какого типа он указывает:
int *p;
double *t;
Для получения адреса переменной используется операция раскрытия указателя & :
int a;
int* p;
p=&a;
Для получения указателя на массив достаточно приравнять указатель имени массива:
long mas1[10]={0};
long* p=mas1;
Любой указатель ссылается на неограниченную в обе стороны область памяти, заполненную переменными указуемого типа. Поэтому, получив адрес 0-го элемента ( p=mas1), легко получить адрес 5-того: р+5. Значение mas1[5] при этом можно получить таким образом: *(p+5)
Пример работы с массивом с помощью указателя и ввода-вывода массива из (в) файла:
#include <fstream>
#include <iostream>
using namespace std;
void main()
{
ifstream input("test.txt");
long mas1[10]={0};
long* p=mas1;
long s=0;
for(int i=0; i<10;i++) input>>mas1[i]; // ввод из файла test.txt
for(int i=0; i<10;i++) cout<<*(p+i)<<" "; // вывод массива на экран с помощью указателя
for(int i=0; i<10;i++) s+=*(p+i); // работа с массивом
cout<<s<<" s="<<s<<endl;
ofstream output("prim.txt");
for(int i=0; i<10;i++) output<<mas1[i]; // вывод в файл prim.txt
}
По аналогии решите задачи:
1. Напишите программу в которой нужно
- описать массив целого типа из 50 элементов, равных 0.
- заполнить массив числами Фибоначчи: F0=0, F1=1, F(n+1)=F(n)+F(n-1)
- вывести массив в файл Fib.txt
- с помощью указателей найти номер числа Фибоначчи, равного 4181
2. Напишите программу в которой нужно:
- описать массив действительного типа из 50 элементов, заданный с помощью генератора случайных чисел в диапазоне [-5,5[
- найти максимальный элемент массива и его номер
- считать из файла Fib.txt пятое число и сравнить его с найденным максимальным элементом
Этот комментарий был удален автором.
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьПочему-то не вставляется код полностью...
ОтветитьУдалитьИмеется проблема с наполнением второго массива случайными числами
#include
#include
#include
#include
using namespace std;
void main()
{
long a[50]={0,1};
const int n=50;
int i,k;
long b[50]={0};
long* p=a;
for(i=0;i<2;i++)cout<>a[i];
srand((unsigned)time(NULL));
for (k=0; kb[0])
{
max=b[k];
}
}
cout<<"max= "<<max<<endl;
}
Вспомнил, что есть Google Диск и залил архив с программой: http://tinyurl.com/h7so2pu
ОтветитьУдалитьВсе правильно работает, а увидеть это можно, если при печати на экран выводить все элементы:
Удалитьfor (k=0;k<n;k++) cout<<b[k]<<endl;
b[K!!!]