C++ за 21 день седьмое издание



Download 1,38 Mb.
bet124/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   120   121   122   123   124   125   126   127   ...   437
Bog'liq
word1

#include




    1. #include

2 : using namespace std;
3:
4: int main()

5:

{

"Enter your

name: ";

6:

cout «

7:

string Name;




8 :

cin »

Name;




9:

// Добавить 1 к резервируемому объему памяти для завершающего

1 0 :




// нулевого символа

= Name.length() + 1;

1 1 :

int CharsToAllocate

1 2 :










  1. // запрос памяти для содержания копии ввода




  1. char* CopyOfName = new char [CharsToAllocate];








  1. // strcpy копирует из строки с завершающим нулевым символом




  1. strcpy(CopyOfName, Name.c_str());



18:



  1. // Отобразить скопированную строку

2 0 : cout « "Dynamically allocated buffer contains: " « CopyOfName



  1. endl;

2 1 :
2 2 : // Буфер больше не используется? Удалить его



  1. delete[] CopyOfName;








  1. return 0;




  1. }



Результат


Enter your name: Siddhartha


Dynamically allocated buffer contains: Siddhartha

Динамическое распределение памяти

179



Анализ

Самыми важными являются строки И и 23, где используются операторы new и d e -


_ ete [ ] соответственно. По сравнению с листингом 8.7, где резервировалось место только лля одного элемента, здесь резервируется блок памяти для нескольких элементов. Такому резервированию массива элементов должно соответствовать освобождение с использо­ ванием оператора d e l e t e [ ] , чтобы освободить память по завершении ее использования. Количество резервируемых символов вычисляется в строке 11 как на единицу большее, чем количество символов, введенных пользователем, чтобы разместить завершающий символ NULL, который важен в строках стиля С. Потребность в завершающем символе NULL объяснялась на занятии 4, “ М ассивы и строки”. Ф актическое копирование осу­ ществляется в строке 17 оператором s t r c p y , который использует метод c _ s t r () строки


::ате, предоставляемый классом s t d : : s t r i n g , чтобы скопировать ее в символьный буфер IcpyOfName.







ПРИМЕЧАНИЕ

Операторы new и delete резервируют область в динамической памяти. Д и­




намическая память (free store) - это абстракция памяти в форме пула памяти,

который ваше приложение может распределять (allocate) (т.е. резервировать


(reserve) области) и возвращать (de-allocate) (т.е. освобождать (release)).



Воздействие операторов инкремента и декремента (++ и -) на указатели

Указатель содержит адрес области памяти. Например, указатель на целое число в ли­ стинге 8.3 содержит значение 0 x 0 0 2 E F B 3 4 — адрес, по которому размещается целое чис­ ло. Само целое число имеет длину 4 байта, а следовательно, занимает в памяти четыре «еста от 0 x 0 0 2 E F B 3 4 до 0 x0 0 2 E F B 3 7 . Приращение значения этого указателя с использо­ ванием оператора (++) не даст значения 0 x0 0 2 E F B 3 5 , указывающего на середину целого числа, что было бы бессмысленно.


Операция инкремента (приращения) или декремента с указателем интерпретируется компилятором как потребность перевода указателя на следующее значение в блоке памя­ ти, с учетом того, что он имеет тот же тип, а не на следующий байт (если тип значения не кмеет длину в 1 байт, как, например тип ch a r) .


Так, результатом инкремента такого указателя, как p l n t e g e r из листинга 8.3, будет


.ъеличение его значения на 4 байта, что соответствует размеру типа i n t . Использование гператора ++ для этого указателя говорит компилятору, что вы хотите перевести его на следующее расположенное далее целое число. Следовательно, после приращения указа­ тель будет указывать на адрес 0 x0 0 2 E FB 3 8 . Точно так же добавление 2 к этому указателю привело бы к его переводу на 2 целых числа далее, что составит 8 байтов вперед. Впослед­ ствии вы увидите корреляцию между этим поведением, демонстрируемым указателями, и индексами, используемыми в массивах.


Декремент указателя с использованием оператора (-) демонстрирует тот же эффект — значение, содержавшееся в указателе адреса, уменьшается на размер типа данных, на ко­ торые он указывает.



  1. ЗАНЯТИЕ 8. Указатели и ссылки


Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   120   121   122   123   124   125   126   127   ...   437




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish