ওয়েল আমি পাশাপাশি কিছু যোগ করতে হবে। অ্যারের চেয়ে স্ট্রাকচারটি কিছুটা আলাদা কারণ অ্যারে একটি পয়েন্টার এবং কাঠামো নয়। তাই সতর্কতা অবলম্বন করা!
বলি আমি কোডটির এই অকেজো টুকরোটি লিখি:
#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 বাদ গেল।