Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Примеры программ. Пример 1. Программа, демонстрирующая работу с указателями и ссылками.






Пример 1. Программа, демонстрирующая работу с указателями и ссылками.

 

#include " stdafx.h"

#include < iostream>

#include < stdio.h>

 

using namespace std;

 

void main()

{

setlocale(LC_ALL, " Russian");

 

int a = 1, b;

int *x, *y = & b; //

b = 3;

x = & a;

int *z = new int(5);

int & k = b;

 

printf(" +-------+---+---+--------+--------+---+---+---+--------+--------+---+--------+\n");

printf(" | cmd | a |*x | & a | x | b |k |*y | & b | y |*z | z |\n");

printf(" +-------+---+---+--------+--------+---+---+---+--------+--------+---+--------+\n");

printf(" | | %1d | %1d | %6X | %6X | %1d | %1d | %1d | %6X | %6X | %1d | %6X |\n", a, *x, & a, x, b, k, *y, & b, y, *z, z);

 

//увеличим значение ячейки памяти на которую указывает x, (т.е. переменную b), при этом поменяется и b

(*x)++;

printf(" |(*x)++ | %1d | %1d | %6X | %6X | %1d | %1d | %1d | %6X | %6X | %1d | %6X |\n", a, *x, & a, x, b, k, *y, & b, y, *z, z);

 

//присвоим b знаяени -1, при этом поменяется и *x

b = 7;

printf(" |b = 7 | %1d | %1d | %6X | %6X | %1d | %1d | %1d | %6X | %6X | %1d | %6X |\n", a, *x, & a, x, b, k, *y, & b, y, *z, z);

 

//скопируем значение ячейки памяти на которую указывает z в ячейку на которую указывает y

*y = *z;

printf(" |*y = *z| %1d | %1d | %6X | %6X | %1d | %1d | %1d | %6X | %6X | %1d | %6X |\n", a, *x, & a, x, b, k, *y, & b, y, *z, z);

 

//тепеь x указывает туда же, куда и y, т.е. на b, значение *x поменялось

x = y;

printf(" |x = y | %1d | %1d | %6X | %6X | %1d | %1d | %1d | %6X | %6X | %1d | %6X |\n", a, *x, & a, x, b, k, *y, & b, y, *z, z);

 

//изменим значение a, другие значения не изменились, так как x на a больше никто не указывает

a *= 3;

printf(" |a *= 3 | %1d | %1d | %6X | %6X | %1d | %1d | %1d | %6X | %6X | %1d | %6X |\n", a, *x, & a, x, b, k, *y, & b, y, *z, z);

 

//поменялись значения указателей, которые указывали на b и сама b

*x = 9;

printf(" |*x = 9 | %1d | %1d | %6X | %6X | %1d | %1d | %1d | %6X | %6X | %1d | %6X |\n", a, *x, & a, x, b, k, *y, & b, y, *z, z);

 

//теперь x указывает туда же, куда и z, т.е. на переменную в динамической памяти,

//значение *y поменялось и адрес y тоже

y = z;

printf(" |y = z | %1d | %1d | %6X | %6X | %1d | %1d | %1d | %6X | %6X | %1d | %6X |\n", a, *x, & a, x, b, k, *y, & b, y, *z, z);

 

//изменим значение b через ссылку k

k = 7;

printf(" |k = 7 | %1d | %1d | %6X | %6X | %1d | %1d | %1d | %6X | %6X | %1d | %6X |\n", a, *x, & a, x, b, k, *y, & b, y, *z, z);

 

//изменим значение b через ссылку k

k -= 3;

printf(" |k -= 3 | %1d | %1d | %6X | %6X | %1d | %1d | %1d | %6X | %6X | %1d | %6X |\n", a, *x, & a, x, b, k, *y, & b, y, *z, z);

 

//изменим значение z

*z += 3;

printf(" |*z += 3| %1d | %1d | %6X | %6X | %1d | %1d | %1d | %6X | %6X | %1d | %6X |\n", a, *x, & a, x, b, k, *y, & b, y, *z, z);

 

printf(" +-------+---+---+--------+--------+---+---+---+--------+--------+---+--------+\n");

 

delete z;

}

 

Результаты работы программы:

 

+-------+---+---+--------+--------+---+---+---+--------+--------+---+--------+

| cmd | a |*x | & a | x | b |k |*y | & b | y |*z | z |

+-------+---+---+--------+--------+---+---+---+--------+--------+---+--------+

| | 1 | 1 | 12FF60 | 12FF60 | 3 | 3 | 3 | 12FF54 | 12FF54 | 5 | 3159C0 |

|(*x)++ | 2 | 2 | 12FF60 | 12FF60 | 3 | 3 | 3 | 12FF54 | 12FF54 | 5 | 3159C0 |

|b = 7 | 2 | 2 | 12FF60 | 12FF60 | 7 | 7 | 7 | 12FF54 | 12FF54 | 5 | 3159C0 |

|*y = *z| 2 | 2 | 12FF60 | 12FF60 | 5 | 5 | 5 | 12FF54 | 12FF54 | 5 | 3159C0 |

|x = y | 2 | 5 | 12FF60 | 12FF54 | 5 | 5 | 5 | 12FF54 | 12FF54 | 5 | 3159C0 |

|a *= 3 | 6 | 5 | 12FF60 | 12FF54 | 5 | 5 | 5 | 12FF54 | 12FF54 | 5 | 3159C0 |

|*x = 9 | 6 | 9 | 12FF60 | 12FF54 | 9 | 9 | 9 | 12FF54 | 12FF54 | 5 | 3159C0 |

|y = z | 6 | 9 | 12FF60 | 12FF54 | 9 | 9 | 5 | 12FF54 | 3159C0 | 5 | 3159C0 |

|k = 7 | 6 | 7 | 12FF60 | 12FF54 | 7 | 7 | 5 | 12FF54 | 3159C0 | 5 | 3159C0 |

|k -= 3 | 6 | 4 | 12FF60 | 12FF54 | 4 | 4 | 5 | 12FF54 | 3159C0 | 5 | 3159C0 |

|*z += 3| 6 | 4 | 12FF60 | 12FF54 | 4 | 4 | 8 | 12FF54 | 3159C0 | 8 | 3159C0 |

+-------+---+---+--------+--------+---+---+---+--------+--------+---+--------+

 

 

Пример 2. Найти сумму элементов в динамическом массиве. Размерность массива ввести с клавиатуры. Использовать различные варианты при обращении к массиву.

 

#include " stdafx.h"

#include < iostream>

 

using namespace std;

 

void main()

{

setlocale(LC_ALL, " Russian");

 

//введем размерность массива

int N;

cout < < " Введите размерность массива: ";

cin > > N;

 

//создаем массив динамически

int *a = new int[N];

 

//введем элементы массива с клавиатуры

for (int i = 0; i < N; i++)

{

cout < < " Введите " < < i < < " -й элемент массива: ";

cin > > a[i];

}

 

//объявим переменную для хранения суммы элементов

int s = 0;

 

//просуммируем элементы массива

for (int i = 0; i < N; i++)

s += *(a + i);

 

//выведем на экран элементы массива и их сумму

cout < < " a: ";

for (int i = 0; i < N; i++)

cout < < " " < < i[a];

 

cout < < endl < < " Сумма элементов: " < < s < < endl;

 

//очищаем выделенную памать

delete[] a;

}

 

Контрольные вопросы

1. Что такое указатель?

2. Как определить указатель?

3. Как проинициализировать указатель?

4. Какие способы инициализации указателей вы знаете?

5. Как обратиться к переменной, адресуемой указателем?

6. Как получить адрес объекта?

7. Какие операции можно выполнять над указателями?

8. Что такое ссылка?

9. Как объявить ссылку?

10. Как создать переменную в динамической памяти?

11. Как удалить переменную из динамической памяти?

12. На что следует обращать особое внимание при работе с динамической памятью?

13. Какие способы обращения к элементам массива вы знаете?

14. Что такое динамический массив и для чего они применяются?

15. Как создать динамический массив?






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.