Поставленная задача:
Напишите программу, использующую функцию с именем double_it, которая умножает значение переменной, переданной в нее, на 7, - или, более конкретно, умножает значение переменной, адрес которой передан в функцию, на 7.
Исходный код:
#include <iostream.h>
#include <conio.h>
void double_it(int*p);
int main ()
{
clrscr ();
int a=5,b=6;
cout<<"Pervoe chislo"<<a<<endl;
cout<<"Vtoroe chislo"<<b<<endl;
double_it(&a);
double_it(&b);
cout<<"Pervoe posle ymnogeniya"<<a<<endl;
cout<<"vtoroe posle ymnogeniya"<<b<<endl;
getch ();
return 0;
}
void double_it(int*p)
{
*p=*p*7;
}
#include <conio.h>
void double_it(int*p);
int main ()
{
clrscr ();
int a=5,b=6;
cout<<"Pervoe chislo"<<a<<endl;
cout<<"Vtoroe chislo"<<b<<endl;
double_it(&a);
double_it(&b);
cout<<"Pervoe posle ymnogeniya"<<a<<endl;
cout<<"vtoroe posle ymnogeniya"<<b<<endl;
getch ();
return 0;
}
void double_it(int*p)
{
*p=*p*7;
}
Ответы на вопросы:
Какие классы памяти существуют в C++?
В языке Си++ существует три способа выделения памяти для используемых в программе данных: автоматическое, статическое и динамическое.
Самый простой метод - это объявление переменных внутри функций. Если переменная объявлена внутри функции, каждый раз, когда функция вызывается, под переменную автоматически отводится память. Когда функция завершается, память, занимаемая переменными, автоматически освобождается. Такие переменные называют автоматическими.
При создании автоматических переменных они никак не инициализируются, т.е. значение автоматической переменной сразу после ее создания не определено, нельзя предсказать каково будет это значение. Соответственно, перед использованием автоматических переменных их необходимо либо явно инициализовать, либо присвоить какое-либо значение.
int funct ( )
{
double f; // значение f неопределено
f = 1.2; // теперь значение f определено
// явная инициализация автоматической переменной
bool result = true;
…
}
{
double f; // значение f неопределено
f = 1.2; // теперь значение f определено
// явная инициализация автоматической переменной
bool result = true;
…
}
Аналогично автоматическим переменным, объявленным внутри функции, автоматические переменные, объявленные внутри блока (последовательности операторов, заключенных в фигурные скобки) создаются при входе в блок и уничтожаются при выходе из блока.
Для чего в качестве аргументов функций используются указатели?
В языках Си/С++ в тело вызываемой функции передаются не сами фактические параметры, а их копии. Следовательно, все действия, производимые в теле функции над фактическими параметрами, на самом деле производятся над их копиями и не приводят к изменению фактических параметров. Такая организация передачи параметров, естественно, приводит к увеличению требуемой памяти и времени выполнения программы. Для того чтобы сэкономить память и изменять значения фактических параметров используют указатели.
В чем заключается связь между массивами и указателями?
Существует определенная связь между указателями и массивами. Предположим, имеется массив из 100 целых чисел.
Запишем двумя способами программу суммирования элементов этого массива:
long array[100];
long sum = 0;
for (int i = 0; i < 100; i++)
sum += array;
long sum = 0;
for (int i = 0; i < 100; i++)
sum += array;
To же самое можно сделать с помощью указателей:
long array[100];
long sum = 0;
for (long* ptr = &array[0]; ptr < &array[99] + 1; ptr++)
sum += *ptr;
long sum = 0;
for (long* ptr = &array[0]; ptr < &array[99] + 1; ptr++)
sum += *ptr;
Элементы массива расположены последовательно в памяти и увеличение указателя на единицу означает смещение к следующему элементу массива. Упоминание имени массива без индексов преобразуется к адресу его первого элемента.
Если вам нравится то, что мы пишем, пожалуйста, нажмите на интересующую вас рекламу сбоку, сверху, или сразу после статьи. Будет стимул писать лучше и чаще. Хорошего вам дня.