เลขคณิตตัวชี้ C ++

Lekhkhnit Taw Chi C



บทความนี้เกี่ยวกับเลขคณิตของพอยน์เตอร์ในภาษา C++ พอยน์เตอร์เป็นตัวแปรที่เก็บที่อยู่หน่วยความจำของข้อมูล เลขคณิตของตัวชี้เป็นจุดเด่นอันทรงพลังในโลกของภาษาการเขียนโปรแกรม C++ ซึ่งช่วยให้เราสามารถจัดการกับการดำเนินการทางคณิตศาสตร์ต่างๆ ซึ่งการบวก การคูณ การหาร การเพิ่มขึ้น การลดลง และการลบ เกี่ยวข้องกับตัวชี้เพื่อพัฒนาที่อยู่หน่วยความจำใหม่ในบัฟเฟอร์หน่วยความจำของเรา . เลขคณิตของพอยน์เตอร์จะสร้างการจัดสรรหน่วยความจำแบบไดนามิกได้อย่างง่ายดาย ในบทความภาษา C++ นี้ เราจะได้เรียนรู้วิธีจัดการที่อยู่หน่วยความจำด้วยวิธีต่างๆ ด้วยความช่วยเหลือจากพอยน์เตอร์ และให้แนวทางและตัวอย่างที่เหมาะสม

สถานการณ์ที่ 1: ตัวชี้ดำเนินการเพิ่มและลดค่า

ที่นี่ เราจะเรียนรู้เกี่ยวกับการจัดการพอยน์เตอร์เพื่อสร้างที่อยู่หน่วยความจำที่แตกต่างกันซึ่งมีจุดประสงค์ที่แตกต่างกัน พอยน์เตอร์ที่เพิ่มขึ้นและลดลงยังเป็นเลขคณิตของเลเวอเรจพอยน์เตอร์ที่เพิ่มหรือลดที่อยู่ด้วยปัจจัยหนึ่งคูณด้วยขนาดของชนิดข้อมูลที่พวกมันชี้ไป ข้อมูลโค้ดที่เกี่ยวข้องกับสถานการณ์นี้แนบมาดังต่อไปนี้:







#รวม
ใช้เนมสเปซมาตรฐาน;
const int Arr_Max = 5 ;
int หลัก ( ) {
int  ที่ไหน [ Arr_Max ] = { ยี่สิบ , 150 , 270 } ;
ภายใน * พีทีอาร์; // ประกาศ ตัวชี้
พีทีอาร์ = var;
สำหรับ ( อินท์ ไอ = 0 ; ฉัน < Arr_Max; ฉัน++ ) {
มาตรฐาน::cout << 'ที่อยู่หน่วยความจำขององค์ประกอบคือ : [' << ฉัน << '] = ' ;
มาตรฐาน::cout << ปตท << จบ;
ศาล << 'ค่าเทียบกับที่อยู่คือ [' << ฉัน << '] = ' ;
ศาล << * ปตท << จบ;
มาตรฐาน::cout << 'เพิ่มตัวชี้สำเร็จแล้ว' << จบ;
พีทีอาร์++;
}
มาตรฐาน::cout << 'ที่อยู่ตัวชี้ก่อนลดลง' << ปตท << จบ;
พีทีอาร์--;
มาตรฐาน::cout << 'ที่อยู่ตัวชี้หลังจากการลดลง' << ปตท << จบ;
กลับ 0 ;
}


ที่นี่ เรากำหนดไลบรารีที่จำเป็นในโค้ดตั้งแต่เริ่มต้น: “ ” เรากำหนดการจัดสรรหน่วยความจำเพื่อสำรองพื้นที่ในหน่วยความจำซึ่งก็คือ “Arr_Max=5” ในฟังก์ชันหลัก เราจะเริ่มต้นอาร์เรย์และส่งผ่านขนาดหน่วยความจำไปยังอาร์เรย์นั้น ถัดไป จำเป็นต้องมีการประกาศตัวชี้ 'ptr' เพื่อชี้ที่อยู่หน่วยความจำในหน่วยความจำ



เราส่งอาร์เรย์ไปยังตัวชี้เพื่อเข้าถึงที่อยู่ ดังที่เราทุกคนทราบกันดีว่าอาร์เรย์จะประกอบด้วยหลายรายการในตำแหน่งที่ต่างกันเสมอ ดังนั้นเราจึงจำเป็นต้องมีการวนซ้ำด้วยตัวชี้ “ช่วยเหลือ” เพื่อเข้าถึงทุกองค์ประกอบของอาร์เรย์ ทุกครั้งที่ดำเนินการวนซ้ำ เราจะได้รับที่อยู่หน่วยความจำและค่าเทียบกับที่อยู่นี้ด้วยความช่วยเหลือของตัวดำเนินการเพิ่มทางคณิตศาสตร์ของตัวชี้ “ptr++” ซึ่งจะเลื่อนที่อยู่หน่วยความจำไปยังที่อยู่ถัดไปของหน่วยความจำ วงจรการประมวลผลแบบวนซ้ำขึ้นอยู่กับขนาดของอาร์เรย์ ภายนอกลูป เราต้องการให้ตัวชี้กลับไปยังที่อยู่หน่วยความจำก่อนหน้าโดยใช้ตัวชี้การลดค่า 'ptr- -'



รันโค้ดนี้โดยคลิกตัวเลือก Execute>Compile & Run แล้วคุณจะได้ผลลัพธ์ต่อไปนี้:






หวังว่าผลลัพธ์นี้จะง่ายต่อการเข้าใจ ที่อยู่และค่าหน่วยความจำมีการเปลี่ยนแปลง การเปลี่ยนตัวชี้จากตำแหน่งเดียวสามารถทำได้จากเลขคณิตของตัวชี้ที่เพิ่มขึ้นใน C ++ เท่านั้น

สถานการณ์ที่ 2:  การลบตัวชี้สองตัวใน C++

ในสถานการณ์นี้ เราจะเรียนรู้วิธีการลบพอยน์เตอร์สองตัวขึ้นไปในภาษา C++ การดำเนินการทางคณิตศาสตร์ทั้งหมดที่การลบเกิดขึ้นนั้นเป็นกระบวนการที่สำคัญ เนื่องจากเราสามารถลบพอยน์เตอร์สองตัวพร้อมกันได้ก็ต่อเมื่อพวกมันมีประเภทข้อมูลเดียวกัน



การดำเนินการอื่นๆ เช่น การบวก การคูณ และการหาร ไม่สามารถทำได้ในตัวชี้ เนื่องจากไม่สมเหตุสมผลในการกำหนดที่อยู่หน่วยความจำ ข้อมูลโค้ดแนบมาดังต่อไปนี้:

#รวม
int หลัก ( ) {
เขากวักมือเรียก [ ] = { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
ภายใน * ptrr1 = & เพื่อสิ่งนั้น [ 3 ] ; // ตัวชี้ไปยังองค์ประกอบที่สาม ( 42 )
ภายใน * ptrr2 = & เพื่อสิ่งนั้น [ 6 ] ; // ตัวชี้ไปยังองค์ประกอบที่หก ( 89 )
ptrdiff_t ptrลบ = ptrr2 - ptrr1;

มาตรฐาน::cout << 'ความแตกต่างระหว่างที่อยู่เหล่านี้คือ: ' << ptrลบ << 'องค์ประกอบ' << มาตรฐาน::endl;
กลับ 0 ;
}


การดำเนินการลบคือการค้นหาความแตกต่างระหว่างที่อยู่หน่วยความจำในภาษา C++ ในฟังก์ชันหลัก เราใช้อาร์เรย์ที่มีค่าต่างกันที่ดัชนีต่างกัน ในอาร์เรย์ ทุกดัชนีมีตำแหน่งหน่วยความจำที่แตกต่างกัน เราสามารถค้นหาความแตกต่างระหว่างพอยน์เตอร์สองตัวได้ด้วยความช่วยเหลือของเลขคณิตของพอยน์เตอร์ ที่นี่เราใช้พอยน์เตอร์ชนิดพิเศษ “ptrdiff_t” ที่ต้องใช้เพื่อค้นหาความแตกต่างระหว่างพอยน์เตอร์ตั้งแต่สองตัวขึ้นไปใน C++

ผลลัพธ์ของรหัสนี้แนบมาดังต่อไปนี้:


ความแตกต่างระหว่างที่อยู่เหล่านี้คือตามองค์ประกอบซึ่งก็คือ 3

สถานการณ์ที่ 3: เปรียบเทียบตัวชี้สองตัวขึ้นไปใน C ++

ในสถานการณ์นี้ เราจะเรียนรู้วิธีเปรียบเทียบพอยน์เตอร์ที่แตกต่างกันในภาษา C++ โดยใช้ตัวดำเนินการเชิงสัมพันธ์ที่แตกต่างกัน เช่น “==”, “<=”, “>=”, “<”, ”>” เราสามารถเปรียบเทียบพอยน์เตอร์ได้ก็ต่อเมื่อมันชี้ไปยังที่อยู่ขององค์ประกอบของอาร์เรย์เดียวกัน โปรดจำไว้ว่าการเปรียบเทียบพอยน์เตอร์สองตัวกับประเภทที่แตกต่างกันอาจทำให้เกิดการทำงานที่ไม่ได้กำหนดไว้ ข้อมูลโค้ดที่เกี่ยวข้องกับการเปรียบเทียบตัวชี้ถูกกล่าวถึงดังต่อไปนี้:

#รวม
ใช้เนมสเปซมาตรฐาน;
int หลัก ( )
{
intar1 [ 10 ] = { 4 , 7 , 9 , สิบเอ็ด , 14 , 16 , 18 , ยี่สิบ , 22 , 25 } ;
ภายใน * ptr1 = & arr1 [ 3 ] ;
ภายใน * ptr2 = & arr1 [ 6 ] ;
ภายใน * ptr3 = & arr1 [ 8 ] ;
ภายใน * ptr4 = & arr1 [ 9 ] ;
ถ้า ( ptr1 ==ptr2 )
{
มาตรฐาน::cout << 'พอยน์เตอร์เท่ากัน' << จบ;
}
อื่น ถ้า ( ptr3 < =ptr4 )
{
มาตรฐาน::cout << 'ptr3 น้อยกว่าหรือเท่ากับ ptr4' << สิ้นสุด ;;
}
อื่น
{
มาตรฐาน::cout << 'ตัวชี้จะไม่ถูกเปรียบเทียบในขั้นตอนใด ๆ ' << จบ;
}
กลับ 0 ;
}


ที่นี่เราใช้อาร์เรย์ที่มี 10 องค์ประกอบ เราประกาศตัวชี้สี่ตัวที่ชี้ไปยังดัชนีที่แตกต่างกันของอาร์เรย์ หลังจากนั้นเราจะเปรียบเทียบพอยน์เตอร์ทั้งสี่นี้ในเงื่อนไขที่แตกต่างกันตามที่เห็นในโค้ดที่กำหนด ในเงื่อนไข 'if' ให้ตรวจสอบว่าตัวชี้ 'ptr1' เท่ากับตัวชี้ 'ptr2' หรือไม่ จากนั้นพิมพ์ 'ตัวชี้เท่ากัน' เมื่อเรามีหลายเงื่อนไขที่เราใช้เงื่อนไข 'else if' เพื่อตรวจสอบว่าตัวชี้ 'ptr3' น้อยกว่าเท่ากับตัวชี้ 'ptr4' หรือไม่ หลังจากนั้นให้คลิกที่ ดำเนินการ > คอมไพล์และรัน ตัวเลือก.

ผลลัพธ์ของรหัสนี้แนบมาดังต่อไปนี้:


โดยจะแสดงเงื่อนไขที่ถูกต้องบนหน้าจอคอนโซลและออกจากการคอมไพล์ ตัวชี้ “ptr3” มีค่าที่น้อยกว่าหรือเท่ากับค่าชี้ของตัวชี้ “ptr4”

สถานการณ์ที่ 4: แสดงเลขคี่ด้วย Pointer Arithmetic

ที่นี่ เราจะมาดูกันว่าเราสามารถจัดสรรหน่วยความจำแบบไดนามิกสำหรับอาร์เรย์ของจำนวนเต็มได้อย่างไร ข้อมูลโค้ดที่เกี่ยวข้องกับกรณีนี้มีดังต่อไปนี้:

#รวม
int หลัก ( ) {
หมายเลข int [ ] = { 1 , 12 , 33 , 24 , สิบห้า , 776 , 71 , 18 , 29 , ห้าสิบ } ;
ภายใน * ptrr = ตัวเลข;
มาตรฐาน::cout << 'เลขคี่ในอาร์เรย์: ' ;
สำหรับ ( อินท์ ไอ = 0 ; ฉัน < 10 ; ++ผม ) {
ถ้า ( * ptrr % 2 ! = 0 ) {
มาตรฐาน::cout << * ptrr << ' ' ;
}
ptrr++;
}
มาตรฐาน::cout << มาตรฐาน::endl;
กลับ 0 ;
}


ในฟังก์ชันหลัก เราใช้อาร์เรย์ที่มี 10 องค์ประกอบ เราต้องการตัวชี้ที่ชี้องค์ประกอบทั้งหมดในอาร์เรย์เพื่อตรวจสอบเลขคี่ในอาร์เรย์ ในวง 'for' ให้ตรวจสอบเลขคี่โดยการหารองค์ประกอบปัจจุบันของอาร์เรย์ ตัวนับตัวชี้จะเพิ่มขึ้นหลังจากตรวจสอบองค์ประกอบหนึ่งของอาร์เรย์

หลังจากรันโค้ด ผลลัพธ์จะแสดงบนหน้าจอคอนโซลที่กำหนดดังต่อไปนี้:


ด้วยวิธีนี้ เราสามารถแสดงเลขคี่โดยใช้เลขคณิตของตัวชี้บนหน้าจอคอนโซล

บทสรุป

เราสรุปได้ที่นี่ว่าเลขคณิตของพอยน์เตอร์เป็นเครื่องมือที่มีประสิทธิภาพสูงสุดที่ดำเนินการต่างๆ ใน ​​C++ ตรวจสอบให้แน่ใจว่าตัวชี้เพิ่มหรือลดค่าของอาร์เรย์ที่มีชนิดข้อมูลเดียวกัน เราสามารถเปรียบเทียบค่าของอาร์เรย์ตามที่อยู่หน่วยความจำด้วยความช่วยเหลือของเลขคณิตของพอยน์เตอร์ในภาษาการเขียนโปรแกรม C++ เราสามารถสำรวจอาเรย์และจัดการหน่วยความจำได้อย่างง่ายดายด้วยความช่วยเหลือของเลขคณิตของพอยน์เตอร์