মডিউল পাঠ (2/2)
পয়েন্টার
পয়েন্টার হল C++ এর অন্যতম শক্তিশালী এবং স্বতন্ত্র বৈশিষ্ট্য। তারা আপনাকে সরাসরি কম্পিউটারের শারীরিক মেমরি অ্যাক্সেস করার অনুমতি দেয়, দক্ষ সম্পদ ব্যবস্থাপনা এবং উচ্চ কর্মক্ষমতা সক্ষম করে।
1. মেমরি এবং একটি ঠিকানা কি?
আপনার প্রোগ্রামে আপনি যে ভেরিয়েবল ঘোষণা করেন তা RAM মেমরির একটি ঘরে সংরক্ষণ করা হয়। প্রতিটি কক্ষের একটি অনন্য মেমরি ঠিকানা থাকে (সাধারণত হেক্সাডেসিমেল বিন্যাসে প্রকাশ করা হয়, যেমন, 0x7ffee3bf87ac)।
C++ আমাদেরকে অপারেটরের ঠিকানা & ব্যবহার করে যেকোনো ভেরিয়েবলের মেমরি ঠিকানা পেতে দেয়:
int x = 42;
std::cout << &x; // Prints the memory address of x (e.g., 0x7ffee3bf87ac)2. একটি পয়েন্টার সংজ্ঞা
একটি পয়েন্টার হল একটি বিশেষ ভেরিয়েবল যা অন্য ভেরিয়েবলের মেমরি অ্যাড্রেসকে তার মান হিসাবে সংরক্ষণ করে।
সিনট্যাক্সের জন্য ডেটা টাইপের পরে তারকাচিহ্ন * ব্যবহার করা প্রয়োজন:
int x = 42;
int* ptr = &x; // ptr is a pointer to an integer that contains the address of x3. ডিরেফারেন্স অপারেটর (*)
একটি পয়েন্টার যে ঠিকানায় নির্দেশ করে সেখানে সংরক্ষিত মান অ্যাক্সেস বা পরিবর্তন করতে, আমরা ডিরেফারেন্স অপারেটর (বা ইনডাইরেকশন অপারেটর) ব্যবহার করি, যা * চিহ্ন দ্বারাও প্রতিনিধিত্ব করে:
int x = 42;
int* ptr = &x;
std::cout << *ptr; // Prints 42 (the value ptr points to)
*ptr = 100; // Modifies the value of x through the pointer
std::cout << x; // Now prints 100!4. নাল পয়েন্টার: nullptr
একটি পয়েন্টার যা কোনো বৈধ ঠিকানা নির্দেশ করে না nullptr কীওয়ার্ড দিয়ে শুরু করা উচিত (C++11 এ প্রবর্তিত):
int* ptr = nullptr; // Safe null pointerনিজে চেষ্টা করে দেখুন
প্রধানত, একটি পূর্ণসংখ্যা ভেরিয়েবল মান 42-এ আরম্ভ করা হয়েছে। পূর্ণসংখ্যা ptr-এ একটি পয়েন্টার ঘোষণা করুন যা মানের ঠিকানা নির্দেশ করে। মানটির মান 100 এ সেট করতে ptr-এর ডিরেফারেন্সিং ব্যবহার করুন এবং অবশেষে std::cout ব্যবহার করে মান প্রিন্ট করুন।
ইঙ্গিত দেখান
পয়েন্টারটিকে `int*ptr = &value;`দিয়ে ঘোষণা করুন,`*ptr = 100;`ডিরেফারেন্স করে মান পরিবর্তন করুন এবং`std::cout << মান;` প্রিন্ট করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
একটি ফাংশন doubleValue সংজ্ঞায়িত করুন যা একটি পূর্ণসংখ্যা (int* ptr) একটি পয়েন্টার গ্রহণ করে এবং 2 দ্বারা নির্দেশিত মানকে গুণ করে (যদি পয়েন্টারটি নাল না হয়)। প্রধানত, ভেরিয়েবল নম্বরের ঠিকানা পাস করে doubleValue কল করুন এবং এটি প্রিন্ট করুন।
ইঙ্গিত দেখান
ফাংশন অবশ্যই `int*ptr`গ্রহণ করবে। ভিতরে,`*ptr = (_ptr) _ 2`ব্যবহার করুন। প্রধান কলে এটিকে`ডবল ভ্যালু(&num);` দিয়ে কল করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
প্রদত্ত কোড প্রদত্ত, কোন এক্সপ্রেশন আপনাকে সরাসরি a এর মান পরিবর্তন করতে দেয়, এটি 10 এ সেট করে?
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?