পয়েন্টার
পরিচিতি
এই ডকুমেন্টটি Wave-এ পয়েন্টারের ব্যবহারের পদ্ধতি সম্পর্কে ব্যাখ্যা করে। Wave একটি নিম্ন স্তরের সিস্টেম প্রোগ্রামিং ভাষা যা নির্দিষ্ট মেমরি ঠিকানার পরিচালনা সক্ষম করার জন্য পয়েন্টার ফিচার সরবরাহ করে। একটি পয়েন্টার হল একটি ভেরিয়েবল যা নির্দিষ্ট ধরনের মেমরি ঠিকানাকে নির্দেশ করে, এবং এর মাধ্যমে মানের সরাসরি অ্যাক্সেস এবং সংশোধন করা সম্ভব।
পয়েন্টার ঘোষণা
Wave-এ পয়েন্টার ptr<টাইপ>
ফরম্যাটে ঘোষণা করা হয়। উদাহরণস্বরূপ, একটি পূর্ণসংখ্যার পয়েন্টার নিম্নরূপ ঘোষিত হতে পারে:
var p: ptr<i32>;
এই ঘোষণা i32
টাইপের মান নির্দেশ করে এমন একটি পয়েন্টার p
তৈরি করে।
পয়েন্টার আরম্ভ
পয়েন্টার ভেরিয়েবলের ঠিকানা &
অপারেটর ব্যবহার করে আরম্ভ করা যেতে পারে:
var a: i32 = ১০;
var p: ptr<i32> = &a;
এখানে &a
ভেরিয়েবল a
-এর মেমরি ঠিকানাকে নির্দেশ করে এবং p
সেই ঠিকানার পয়েন্টার হয়ে যায়।
পয়েন্টার ডেরেফারেন্সিং
পয়েন্টার নির্দেশ করা মান পড়া বা পরিবর্ত ন করতে deref
কীওয়ার্ড ব্যবহার করা হয়। এটিকে ডেরেফারেন্সিং বলা হয়:
var a: i32 = ১০;
var p: ptr<i32> = &a;
println("{}", deref p); // ১০ আউটপুট
deref p = ২০;
println("{}", a); // ২০ আউটপুট
NULL পয়েন্টার
Wave-এ NULL পয়েন্টার null
কীওয়ার্ডের মাধ্যমে প্রকাশ করা হয়।
পয়েন্টার ভেরিয়েবল null
দিয়ে আরম্ভ করা যেতে পারে এবং এই ক্ষেত্রে এটি কোনো বৈধ মেমরিকে নির্দেশ করে না:
var p: ptr<i32> = null;
NULL পয়েন্টার ডেরেফারেন্স করার সময় ক ম্পাইলার একটি ত্রুটি ঘটাবে।
বহু পয়েন্টার
Wave বহু পয়েন্টারকে সমর্থন করে। পয়েন্টারগুলিকে একাধিক স্তরে নেস্টেড করে ঘোষণা এবং ব্যবহার করা যেতে পারে:
var x: i32 = ১;
var p1: ptr<i32> = &x;
var p2: ptr<ptr<i32>> = &p1;
var p3: ptr<ptr<ptr<i32>>> = &p2;
println("{}", deref p1); // ১
println("{}", deref deref p2); // ১
println("{}", deref deref deref p3); // ১
অ্যারে এবং পয়েন্টার
পয়েন্টার অ্যারের উপাদান বা পুরো অ্যারেটিকে নির্দেশ করতে পারে।