Г: #include
using namespace std;
int main()
4 • {
const int ARRAY_LEN = 5;
":
3:
// Инициализированный статический массив из 5 целых чисел int MyNumbers[ARRAY_LEN] = {24, -1, 365, -999, 2011};
.
1 3 : // Указатель, инициализированный первым элементом массива
int* pNumbers = MyNumbers;
13: cout « "Displaying array usingpointer syntax,operator*"
endl;
for (int Index = 0; Index < ARRAY_LEN; ++Index)
15: cout << "Element " « Index « " = " « * (MyNumbers + Index)
endl;
16:
1“: cout <<
"Displaying array using pointer with array syntax, operator[]"
endl;
for (int Index = 0; Index < ARRAY_LEN; ++Index)
19: cout « "Element " « Index « " = " « pNumbers[Index]
endl;
return 0;
186 ЗАНЯТИЕ 8. Указатели и ссылки
Результат
Displaying array using pointer syntax, operator*
Element
|
0
|
=
|
24
|
Element
|
1
|
=
|
-1
|
Element
|
2
|
=
|
365
|
Element
|
3
|
=
|
-999
|
Element
|
4
|
= 2011
|
Element
|
0
|
=
|
24
|
Element
|
1 =
|
-1
|
Element
|
2
|
= 365
|
Element
|
3
|
=
|
-999
|
Element
|
4
|
=
|
2011
|
Анализ
Приложение содержит статический массив из пяти целых чисел, инициализированных пятью исходными значениями в строке 8. Приложение отображает содержимое этого мас сива, используя два альтернативных подхода: с использованием переменной типа массива
оператора косвенного доступа (*) в строке 15, а также с использованием переменной указателя и оператора массива ([ ]) в строке 19.
Таким образом, эта программа свидетельствует, что и массив MyNumbers, и указатель pN um bers фактически демонстрируют поведение указателя. Другими словами, объявле ние массива подобно созданию указателя для работы в пределах фиксированного диапазо на памяти. Обратите внимание, что можно присвоить массив указателю, как в строке 11, но нельзя присвоить указатель массиву, поскольку массив имеет статической характер,
следовательно, не может быть 1-значением.
Не забывайте, что указатели, созданные динамически при помощи оператора new, следует освободить при помощи оператора delete, даже если вы исполь зовали такой синтаксис, как у статического массива.
Если вы забудете, то произойдет утечка памяти, а это плохо.
Наиболее распространенные ошибки при использовании указателей
Язык C++ позволяет резервировать память динамически, чтобы использование памяти вашим приложением было оптимальным. В отличие от более новых языков, таких как C# и Java, работающих на базе среды времени выполнения, язык C++ не использует ав томатический сборщик мусора, который очищает зарезервированную вашей программой память, когда она уже не используется. Поскольку указатели способны на разные трюки, у программиста есть масса возможностей сделать ошибки.
Наиболее распространенные ошибки при использовании указателей
|
1 8 7
|
Утечки памяти
Вероятно, это одна из самых распространенных проблем приложений C++: чем доль ше они выполняются, тем больший объем памяти используют и замедляют систему. Это, как правило, случается, когда программист не гарантировал в приложении освобождение памяти, зарезервированной динамически оператором new, при помощи вызова оператора d e le te по завершении ее использования.
Это задача программиста, т.е. ваша, обеспечить освобождение всей зарезервированной вашим приложением памяти. Кое-чему никогда нельзя позволять случаться:
Do'stlaringiz bilan baham: |