ওয়েল আমি পাশাপাশি কিছু যোগ করতে হবে। অ্যারের চেয়ে স্ট্রাকচারটি কিছুটা আলাদা কারণ অ্যারে একটি পয়েন্টার এবং কাঠামো নয়। তাই সতর্কতা অবলম্বন করা!
বলি আমি কোডটির এই অকেজো টুকরোটি লিখি:
#include <stdio.h>
typedef struct{
int km;
int kph;
int kg;
} car;
int main(void){
car audi = {12000, 230, 760};
car *ptr = &audi;
}
এখানে পয়েন্টারটি কাঠামোর ভেরিয়েবলের ptr
ঠিকানা ( ! ) নির্দেশ করে audi
তবে ঠিকানার কাঠামোর পাশেও ডেটা রয়েছে ( ! )! প্রথম সদস্য ডেটার খণ্ড গঠন নিজেই চেয়ে একই ঠিকানা আছে এবং আপনি শুধুমাত্র এই মত একটি পয়েন্টার dereferencing দ্বারা এটি এর ডাটা পেতে পারেন *ptr
(কোন ধনুর্বন্ধনী) ।
কিন্তু আপনি প্রথম এক ছাড়া অন্য সদস্য acess করতে চান তাহলে, তোমার মত designator যোগ আছে .km
, .kph
, .kg
যা বেস ঠিকানায় অফসেট ছাড়া আর কিছুই হয় ডেটার খণ্ড ...
কিন্তু অগ্রাধিকারের কারণে আপনি লিখতে পারবেন না *ptr.kg
যেমন অ্যাক্সেস অপারেটরের .
মূল্য নির্ধারণ করা হয় ডিসিফারেন্স অপারেটরের আগে *
এবং আপনি পাবেন *(ptr.kg)
যা পয়েন্টারের কোনও সদস্য না হওয়ায় এটি সম্ভব নয়! এবং সংকলক এটি জানে এবং অতএব একটি ত্রুটি প্রদান করবে যেমন:
error: ‘ptr’ is a pointer; did you mean to use ‘->’?
printf("%d\n", *ptr.km);
পরিবর্তে আপনি এটি ব্যবহার করেন (*ptr).kg
এবং আপনি পয়েন্টারটিকে 1 ম শ্রদ্ধার জন্য সংকলককে বাধ্য করেন এবং ডেটা বিভাজনে অ্যাক্সেস সক্ষম করেন এবং ২ য় বার আপনি সদস্য চয়ন করতে একটি অফসেট (ডিজাইনার) যুক্ত করেন।
আমি তৈরি এই চিত্রটি দেখুন:
তবে আপনি যদি নেস্টেড সদস্য থাকতেন তবে এই সিনট্যাক্সটি অপঠনযোগ্য হয়ে উঠবে এবং সুতরাং ->
এটি চালু হয়েছিল। আমি মনে করি পাঠযোগ্যতা এটি ব্যবহারের একমাত্র ন্যায়সঙ্গত কারণ এটি ptr->kg
লেখার চেয়ে অনেক সহজ (*ptr).kg
।
এখন আসুন আমরা এটিকে অন্যভাবে লিখি যাতে আপনি সংযোগটি আরও পরিষ্কার করে দেখতে পান। (*ptr).kg
⟹ (*&audi).kg
⟹ audi.kg
। এখানে আমি প্রথম যে ব্যবহৃত ptr
একটি হল "এর ঠিকানা audi
" অর্থাত &audi
এবং সত্য যে "রেফারেন্স" &
এবং "ডি-রেফারেন্স" *
অপারেটরদের eachother বাদ গেল।