Ko‘rsatkichlar


Ko’rsatkichga ko’rsatkich(pointer to pointer) haqida qisqacha



Yüklə 117,5 Kb.
səhifə7/7
tarix16.06.2023
ölçüsü117,5 Kb.
#131322
1   2   3   4   5   6   7
KO

    Bu səhifədəki naviqasiya:
  • Xulosa

Ko’rsatkichga ko’rsatkich(pointer to pointer) haqida qisqacha


Bu mavzuda C++ o’rganayotganim uchun ochig’i kam ma’lumotga egaman, Bu narsa C++ga qaraganda C da ko’p ishlatiladi. Masalan, string tipi “char*”(dinamik kengayuvchi char massiv) dan foydalanadi, siz agar *string qilib ishlatmoqchi bo’lsangiz, bu ish ortida siz “char**” tipida ishlatayotgan bo’lasiz. Quyida soddaroq kod keltirilgan:
int a = 10;
int *b = &a;
int **c = &b;
**c = 20;
cout<
va ekranda uchchalasi ham 20 ga teng ekanligini ko’rasiz, c ni e’lon qilgan joyimizni pastidan yana int ***d = &c; deb davom etib ketishimiz mumkin.

Xulosa


Biz xotiraga qiymat saqlanishining 2 xil turi: stack va heap haqida gaplashdik. Ularning ishlashdagi farqlarini xususiyatlaridan ko’rgan bo’lsangiz kerak. Qisqagina xuloasalar:

  • Stackka qiymat kiritish heapga yozishdan ko’ra tezroq

  • Stack cheklangan hajmga ega, lekin heap dinamik tarzda kengaya oladi

  • Stackka qiymatlar joylash chiziqli, heapga qiymatlar joylash tasodifiy tarzda amalga oshiriladi

  • Stackka kiritiladigan ma’lumotlar stack sig’imidan oshib ketsa, stackoverflow xatoligi yuzaga keladi, bunday holatlar rekursiyada kuzatilishi mumkin. Bunda heapdan foydalangan yaxshi

  • Agar heap ga yozilgan ma’lumotlar tozalab turilmasdan, dastur ishlashda davom etib yana dinamik obyektlar e’lon qilaversa va ularni o’chirmasa, dastur ishlash jarayonida heapoverflow xatoligi yuzaga kelishi mumkin

  • Ko’rsatkich boshqa xotira manzilini o’zida saqlaydigan, stackka joylangan qiymat

  • Memory leakage ni oldini olish uchun dinamik obyektlarni o’chirib yurish yaxshi odat

  • Agar funksiyaga parametr sifatida beradigan o’zgaruvchimiz funksiya ichida o’zgartirilmasa, unda uni havolasini bergan ma’qul

  • 4 baytdan kichik yoki unga teng qiymatlarni heapga kiritish unchalik yaxshi fikrmas, chunki 32 bitlik OSlarda ko’rsatkich stackdan 4 bayt oladi.

Maqola boshidagi kodimizda Test tipidagi t ni global qilganimizda qayoqqa berkinib olgani sizga qiziqmi? U na stackka, va na heapga joylangan, javobi quyidagi rasmda

source: https://icarus.cs.weber.edu/~dab/cs1410/textbook/4.Pointers/memory.html

Shu joyiga kelganda siz bilan uyushtirgan sayohatimiz ham tugadi. Agar yaxshi gidlik qila olgan bo’lsam bundan xursandman, zeriktirib qo’ymadim degan umiddaman ;).
Quyida kichik kod qoldiraman, nega xato ishlashi mumkinligi haqida o’ylab ko’ring:
int* createArray(int size)
{
int array[size] = {0};//massiv barcha elementlarini nollaymiz
return array;
}
int main(){
int *arr = createArray(4);
for(int i = 0; i<4; i++)
cout<return 0;
}

Aytgancha, sayohat boshida kodlarimda ko’rsatkichlardan foydalanmasdim degandim, hozir ham foydalanmayman :) albatta agar koddagi o’zgaruvchilar kattaroq joy talab qilmasa
Mavzu yuzasidan muhokama qiladiganlarimiz shular edi. Agar siz maqoladagi ma’lumotlarda kamchiliklar topsangiz, yoki sizda shu mavzu yuzasidan yuqorida aytilmagan ma’lumotlar bo’lsa maqola muallifiga murojaat qiling, ismingiz maqolada ko’rsatib o’tiladi.
Mavzu bo’yicha shu maqoladagi ma’lumotlar bilan cheklanib qolmasdan qo’shimcha sifatida boshqa manbaalarga ham murojaat qilishingizni so’rab qolaman.
Savollar bo’lsa telegramdagi @C_Genius yoki @cppuz guruhlariga kirib mavzu yuzasidan tushunmagan narsangizni so’rashingiz, yoki muhokama qilishingiz mumkin
Foydalanilgan manbalar:

  • https://www.geeksforgeeks.org/references-in-c/

  • https://www.guru99.com/stack-vs-heap.html

  • https://stackoverflow.com/questions/2975831/is-leaked-memory-freed-up-when-the-program-exits

  • https://stackoverflow.com/questions/3147014/is-heap-memory-per-process-or-common-memory-location-shared-by-different-proc

  • https://icarus.cs.weber.edu/~dab/cs1410/textbook/4.Pointers/memory.html

  • https://www.geeksforgeeks.org/dynamic-memory-allocation-in-c-using-malloc-calloc-free-and-realloc/

  • https://www.freecodecamp.org/news/understand-your-programs-memory-92431fa8c6b/

https://stackoverflow.com/questions/2975831/is-leaked-memory-freed-up-when-the-program-exits
Yüklə 117,5 Kb.

Dostları ilə paylaş:
1   2   3   4   5   6   7




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin