Сделать домашней|Добавить в избранное
 

Сайт, посвящен программированию,
исходникам разных программ и
известным алгоритмам

 
Исходники программ » Языки программирования » C/C++ » Пример операции с адресами памяти в C++
на правах рекламы

Пример операции с адресами памяти в C++

Автор: admin от 21-03-2012, 11:17

Поставленная задача:
Напишите программу, использующую функцию с именем 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;
}


Ответы на вопросы:
Какие классы памяти существуют в C++?
В языке Си++ существует три способа выделения памяти для используемых в программе данных: автоматическое, статическое и динамическое.
Самый простой метод - это объявление переменных внутри функций. Если переменная объявлена внутри функции, каждый раз, когда функция вызывается, под переменную автоматически отводится память. Когда функция завершается, память, занимаемая переменными, автоматически освобождается. Такие переменные называют автоматическими.
При создании автоматических переменных они никак не инициализируются, т.е. значение автоматической переменной сразу после ее создания не определено, нельзя предсказать каково будет это значение. Соответственно, перед использованием автоматических переменных их необходимо либо явно инициализовать, либо присвоить какое-либо значение.
int funct ( )
{
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;

To же самое можно сделать с помощью указателей:
long array[100];
long sum = 0;
for (long* ptr = &array[0]; ptr < &array[99] + 1; ptr++)
sum += *ptr;

Элементы массива расположены последовательно в памяти и увеличение указателя на единицу означает смещение к следующему элементу массива. Упоминание имени массива без индексов преобразуется к адресу его первого элемента.

 

Если вам нравится то, что мы пишем, пожалуйста, нажмите на интересующую вас рекламу сбоку, сверху, или сразу после статьи. Будет стимул писать лучше и чаще. Хорошего вам дня.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий