C++ இல் சுட்டிக்கு சுட்டி

C Il Cuttikku Cutti



இக்கட்டுரை C++ இல் உள்ள சுட்டிக்கு சுட்டிக்காட்டி கருத்து பற்றியது. சுட்டிக்கு சுட்டிக்காட்டி மற்றொரு சுட்டியின் முகவரியைச் சுட்டி அல்லது சேமித்து, சுட்டிகளின் கையாளுதலை செயல்படுத்துகிறது. இந்தக் கருத்தைப் பயன்படுத்தி, நினைவகத்தில் உள்ள மற்றொரு இடத்திலிருந்து ஒரு சுட்டியை எளிதாக மாற்றலாம். ஒரு வரிசையின் கூறுகளைக் கையாள, மாறும் வகையில் ஒதுக்கப்பட்ட நினைவகம் அல்லது பல பரிமாண வரிசைகளில் இரட்டை சுட்டிகள் நன்மை பயக்கும். சி++ இல் சுட்டி வேலை மற்றும் பயன்பாட்டிற்கான இந்த சுட்டியை சரியான எடுத்துக்காட்டுகளுடன் விவாதிப்போம்.

காட்சி 1:  பாயிண்டருக்கு சுட்டியின் நினைவகப் பிரதிநிதித்துவம்

இந்தச் சூழ்நிலையில், இரட்டைச் சுட்டியை அறிவிப்பது, சுட்டிக்காட்டி பெயருக்கு முன் கூடுதல் நட்சத்திரக் குறியீடு (*) உள்ள சுட்டி அறிவிப்புக்கு ஒத்ததாகும். C++ இல் இரட்டை சுட்டியின் நினைவக இருப்பிடத்தை நாம் எளிதாகக் குறிப்பிடலாம். சுட்டியின் குறியீடு துணுக்கு பின்வருவனவற்றில் கொடுக்கப்பட்டுள்ளது:







# அடங்கும்
பெயர்வெளி std ஐப் பயன்படுத்துதல்;
முழு எண்ணாக ( )
{
முழு இலக்கம்  = ஐம்பது ;
முழு எண்ணாக * ptrr;
ptrr = & இலக்கம்;
முழு எண்ணாக ** ptrr1;
ptrr1 = & ptrr;
கூட் << 'சுட்டி நினைவக முகவரி: \n ' ;
கூட் << 'ptrr (சுட்டி): ' << ptrr << ' \n ' ;
கூட் << '*ptrr1 (இரட்டை சுட்டிக்காட்டி): ' <<* ptrr1 << ' \n ' ;
கூட் << 'சுட்டியில் உள்ள மதிப்புகள்: \n ' ;
கூட் << '*ptrr =' <<* ptrr << endl;
கூட் << '**ptrr1 (சுட்டிக்கு சுட்டி) = ' <<** ptrr1 << endl;
திரும்ப 0 ;
}


முக்கிய செயல்பாட்டில், ஒரு மாறியை எடுத்துக்கொள்கிறோம், அதன் நினைவக முகவரி ஒரு சுட்டிக்காட்டியில் சேமிக்கப்பட வேண்டும். இப்போது, ​​நாம் 'இலக்க' மாறியை துவக்குகிறோம். அதன் பிறகு, 'இலக்க' நினைவக முகவரியைச் சேமிக்கும் 'ptrr' சுட்டியை நாங்கள் அறிவிக்கிறோம். இப்போது, ​​“*ptrr” சுட்டியின் முகவரியைச் சேமிக்கும் “**ptrr1” என்ற இரட்டைச் சுட்டியை அறிவிக்கிறோம். குறியீட்டின் முடிவில், கன்சோல் திரையில் சுட்டிக்காட்டி மற்றும் இரட்டை சுட்டிக்காட்டியின் நினைவகம் மற்றும் மதிப்பைக் காண்பிக்கிறோம். இந்த குறியீட்டின் வெளியீடு பின்வருவனவற்றில் குறிப்பிடப்பட்டுள்ளது:




“ptrr” சுட்டியின் நினைவக முகவரி “0x6ffe04”, மேலும் “*ptrr1” சுட்டிக்காட்டி “ptrr” சுட்டியின் நினைவக முகவரியையும் சேமிக்கிறது. சுட்டிக்காட்டி உள்ளே சேமிக்கப்படும் மதிப்பு '50' ஆகும். அடிப்படையில், இரட்டைச் சுட்டியின் முகவரி எப்போதும் சுட்டியின் நினைவக முகவரியைப் போலவே இருக்கும்.



காட்சி 2:  பாயிண்டர் டு பாயிண்டரை செயல்பாட்டு அளவுருவாக

இந்தச் சூழ்நிலையில், எந்த ஒரு மாறியிலும் தற்காலிக நினைவக ஒதுக்கீட்டைச் செய்வதற்கான ஒரு அளவுருவாக எந்தச் செயல்பாட்டிலும் இரட்டைச் சுட்டியை எவ்வாறு அனுப்புவது என்பதைக் கற்றுக்கொள்வோம். இரட்டை சுட்டியுடன் கூடிய செயல்பாட்டு அளவுருவின் குறியீடு துணுக்கு பின்வருவனவற்றில் குறிப்பிடப்பட்டுள்ளது:





# அடங்கும்
வெற்றிட getMemoryAddress ( முழு எண்ணாக ** இரட்டை_ptr ) {
நீங்கள் வானிலை = 200 ;
* இரட்டை_ptr = & வெப்பநிலை;
}

முழு எண்ணாக ( ) {
முழு எண்ணாக * ptr_1;
முழு எண்ணாக ** இரட்டை_ptr;
இரட்டை_ptr = & ptr_1;
நினைவக முகவரி பெறவும் ( இரட்டை_ptr ) ;
std::cout << '**double_ptr இன் மதிப்பு: ' << ** இரட்டை_ptr << std::endl;
திரும்ப 0 ;
}


இங்கே, C++ இல் பாயிண்டர் டு பாயிண்டர் கான்செப்ட் எவ்வாறு செயல்படுகிறது என்பதைக் கற்றுக்கொள்வோம். இரட்டை சுட்டியுடன் வேலை செய்ய நிரலில் ஒரு சுட்டிக்காட்டி அறிவிக்கப்பட்டுள்ளது என்பதை நினைவில் கொள்ளுங்கள். எனவே, 'getMemoryAddress' செயல்பாட்டை உருவாக்குகிறோம். இந்த செயல்பாட்டை நாங்கள் வடிவமைக்கிறோம், இதன் மூலம் நாம் அளவுருவை அனுப்பும்போது, ​​​​அது தானாகவே இரட்டை சுட்டிக்காட்டியின் நினைவக முகவரியைப் பெறுகிறது.

செயல்பாட்டில், நாம் 'tempp' மாறி மற்றும் '**double_ptr' இரட்டை சுட்டியை எடுத்துக்கொள்கிறோம். குறிப்பிட்ட மாறியின் முகவரியை “tempp” என்று இரட்டைச் சுட்டிக்காட்டி மற்றும் இரட்டைச் சுட்டிக்காட்டி மதிப்புகளை செயல்பாட்டின் வாதமாக அனுப்புகிறோம். நிரல் கன்சோல் திரையில் முக்கிய செயல்பாட்டுக் குறியீட்டின் முடிவைக் காட்டுகிறது, எனவே முக்கிய செயல்பாட்டில் உள்ள அனைத்து விஷயங்களும் இயங்கக்கூடியவை. முக்கிய செயல்பாட்டில் “ptr_1” சுட்டியையும் இரட்டைச் சுட்டியையும் “double_ptr” ஆக எடுத்துக்கொள்கிறோம். சுட்டியின் முகவரியை இரட்டைச் சுட்டிக்காட்டிக்கு அனுப்புகிறோம்.



இப்போது, ​​ஓவர்ரைடு செயல்பாட்டில் இரட்டைச் சுட்டி மாறியைக் கடந்து, இரட்டைச் சுட்டியின் முடிவைக் காட்ட, 'கவுட்' வெளியீட்டு ஸ்ட்ரீம் அறிக்கையில் சுட்டிக்காட்டி மாறிக்கு அனுப்புகிறோம்.

கம்பைலர் ஓவர்ரைடு செயல்பாட்டை அடையும் போது, ​​இந்த செயல்பாடு வரையறுக்கப்பட்டுள்ள கம்பைலர் செக்கர், செயல்பாட்டிற்குள் குறியீட்டை இயக்கி, முடிவை முக்கிய செயல்பாட்டிற்குத் தருகிறது.

இந்த குறியீட்டின் வெளியீடு பின்வருவனவற்றில் இணைக்கப்பட்டுள்ளது:


முடிவு: இரட்டைச் சுட்டியின் மதிப்பு 200.

காட்சி 3:  பாயிண்டர் டு பாயிண்டருடன் 2டி அணிவரிசையைப் பயன்படுத்துதல்

இந்த எடுத்துக்காட்டில், இரட்டை சுட்டிக்காட்டி கொண்ட 2D வரிசையை கையாள்வோம். நாம் ஒரு வரிசையை எடுத்து, ஒரு வரிசையின் முகவரியை சுட்டிக்காட்டியில் அனுப்புகிறோம். இந்த காட்சியின் முழுமையான குறியீடு பின்வருமாறு வழங்கப்படுகிறது:

முழு எண்ணாக ( ) {
const int வரிசைகள் = 3 ;
const int cols = 2 ;
முழு எண்ணாக ** அணி = புதிய எண்ணாக * [ வரிசைகள் ] ;
க்கான ( int i = 0 ; நான் < வரிசைகள்; ++i ) {
அணி [ நான் ] = புதிய எண்ணாக [ cols ] ;
}
க்கான ( int i = 0 ; நான் < வரிசைகள்; ++i ) {
க்கான ( int j = 0 ; ஜே < கோல்கள்; ++ஜே ) {
அணி [ நான் ] [ ஜே ] = நான் * cols + j;
}
}
க்கான ( int i = 0 ; நான் < வரிசைகள்; ++i ) {
க்கான ( int j = 0 ; ஜே < கோல்கள்; ++ஜே ) {
கூட் << அணி [ நான் ] [ ஜே ] << '' ;
}
கூட் << endl;
}
க்கான ( int i = 0 ; நான் < வரிசைகள்; ++i ) {
அழி [ ] அணி [ நான் ] ;
}
அழி [ ] அணி;
திரும்ப 0 ;
}


நாம் அனைவரும் அறிந்தபடி, 2D வரிசையில் பல வரிசைகள் மற்றும் பல நெடுவரிசைகள் உள்ளன. முக்கிய செயல்பாட்டில், 'const int' கொண்ட வரிசைகள் மற்றும் நெடுவரிசைகளை துவக்குகிறோம். அதன் பிறகு, வரிசைகளுக்கான நினைவக இடத்தையும், ஒவ்வொரு வரிசையிலும் நெடுவரிசைகளுக்கான நினைவக இடத்தையும் ஒதுக்குகிறோம். மேட்ரிக்ஸ் இரட்டைச் சுட்டியில் ஒரு சுட்டியாக வரிசை மதிப்பின் எண்ணிக்கையை “**மேட்ரிக்ஸ்” என அனுப்புகிறோம். இந்த இரட்டை சுட்டியில், வரிசைகளின் எண்ணிக்கையின் லூப் செயல்படுத்தப்படுகிறது அல்லது உண்மையாக இருக்கும். பின்னர், நிபந்தனை தவறானதாக மாறும் வரை மற்றொரு உள் வளையம் செயல்படுத்தப்படுகிறது.

நினைவக ஒதுக்கீட்டிற்குப் பிறகு, மீண்டும் ஒரு வரிசையில் மதிப்பை ஒதுக்குகிறோம்: வரிசைகளுக்கான வெளிப்புற வளையம் மற்றும் 2D வரிசையின் நெடுவரிசைகளுக்கு உள் வளையம். உள் சுழற்சியில், வரிசைகள் மற்றும் நெடுவரிசைகளின் மதிப்பு இரட்டைச் சுட்டிக்காட்டிக்கு ஒதுக்கப்பட்டு, தேவையான எண்கணித செயல்பாட்டைச் செய்கிறது. நினைவகத்தில் ஒதுக்கப்பட்ட வரிசைகள் மற்றும் நெடுவரிசைகளின் எண்ணிக்கை போன்ற 2D வரிசையின் மதிப்புகளைக் காண்பிக்கிறோம். வரிசைகள் மற்றும் நெடுவரிசைகளின் எண்ணிக்கை எப்போதும் வரிசைகள் மற்றும் நெடுவரிசை மதிப்புகளைச் சேமிக்கும் இரட்டைச் சுட்டியைக் குறிக்கிறது. முடிவில், நினைவகத்தை அழித்து, C++ இல் உள்ள நினைவகத்திலிருந்து இந்த வரிசையை இடமாற்றம் செய்கிறோம்.

இரட்டை சுட்டியுடன் 2D வரிசையின் வெளியீடு பின்வருவனவற்றில் இணைக்கப்பட்டுள்ளது:

காட்சி 4:  பாயிண்டரைப் பயன்படுத்தி சுட்டிகளை மாற்றுதல்

இரட்டை சுட்டியை அறிவிப்பதன் மூலம் C++ இல் உள்ள சுட்டிகளை எவ்வாறு மாற்றுவது என்பதை இங்கே கற்றுக்கொள்வோம். இந்த காட்சியின் குறியீடு துணுக்கு பின்வருவனவற்றில் இணைக்கப்பட்டுள்ளது:

# அடங்கும்
வெற்றிட இடமாற்றம் ( முழு எண்ணாக ** ptrr_1, நீங்கள் ** ptrr_2 ) {
முழு எண்ணாக * temp_var = * ptrr_1;
* ptrr_1 = * ptrr_2;
* ptrr_2 = temp_var;
}
முழு எண்ணாக ( ) {
int x = பதினைந்து , y = 25 ;
முழு எண்ணாக * ptrrA = & எக்ஸ், * ptrrB = & மற்றும்;
std::cout << 'மாற்றுக்கு முன்: *ptrrA =' << * ptrrA << ', *ptrrB = ' << * ptrrB << std::endl;
இடமாற்று ( & ptrrA, & ptrrB ) ;
std::cout << 'இடமாற்றத்திற்குப் பிறகு: *ptrrA என்பது =' << * ptrrA << ', *ptrrB என்பது = ' << * ptrrB << std::endl;
திரும்ப 0 ;
}


முதலில், ஸ்வாப் செயல்பாட்டை உருவாக்குகிறோம், இரண்டு சுட்டிகளையும் செயல்பாடு வாதமாக கடந்து செல்கிறோம். ஸ்வாப் செயல்பாட்டில், நாம் 'டெம்ப்' பாயிண்டரை எடுத்து, 'டெம்ப்' இல் 'சுட்டி1' மதிப்பை சிறிது நேரம் கடந்து செல்கிறோம். பின்னர், 'சுட்டி2' இன் மதிப்பை 'சுட்டி1' க்கு அனுப்புகிறோம். முடிவில், 'டெம்ப்' சுட்டியின் மதிப்பை 'சுட்டி2' க்கு அனுப்புகிறோம்.

முக்கிய செயல்பாட்டில், 'ஸ்வாப்' செயல்பாட்டில் நாம் கடந்து செல்லும் அல்லது மேலெழுத இரண்டு சுட்டிகள் தேவை. கொடுக்கப்பட்ட சுட்டிகளுக்கு மாறிகளின் முகவரிகளை அனுப்புகிறோம். பின்னர், சுட்டியை மாற்றுவதற்கு முன்னும் பின்னும் சுட்டியின் மதிப்பு காட்டப்படும்.

இந்த குறியீட்டின் வெளியீடு பின்வருவனவற்றில் இணைக்கப்பட்டுள்ளது:


நாம் பார்க்கிறபடி, C++ இல் இரட்டைச் சுட்டியைப் பயன்படுத்தி சுட்டியின் மதிப்புகள் வெற்றிகரமாக மாற்றப்படுகின்றன.

முடிவுரை

சுட்டிக்காட்டிக்கு சுட்டிக்காட்டி எப்போதும் C++ இல் எந்த சுட்டியின் நினைவக முகவரியையும் சேமிக்கும் என்று நாங்கள் முடிவு செய்தோம். எந்த நேரத்திலும் எந்த சுட்டியின் நினைவக இருப்பிடத்தையும் தற்காலிகமாகப் பயன்படுத்த இரட்டைச் சுட்டிக்காட்டியைப் பயன்படுத்தலாம். நினைவக முகவரியை மறைமுகமாக கையாளவும், தரவை அணுகவும் இது மிகவும் பயனுள்ள வழியாகும்.