NULL এ সি পয়েন্টার শুরু করা কি সম্ভব?
টিএল; ডিআর হ্যাঁ, খুব বেশি।
প্রকৃত পথ প্রদর্শক উপর দাবি মত সার্চ
অন্যদিকে, আপনি যদি কেবল একক প্রাথমিক অ্যাসাইনমেন্ট ব্যবহার করেন int *my_int_ptr = 2;
, প্রোগ্রামটি my_int_ptr
2 মান দিয়ে চিহ্নিত মেমরির অবস্থানের বিষয়বস্তু পূরণ করার চেষ্টা করবে, যেহেতু my_int_ptr
আবর্জনায় ভরাট, এটি কোনও ঠিকানা হতে পারে। [...]
ওয়েল, তারা হয় ভুল, আপনি ঠিক।
বিবৃতিটির জন্য, ( আপাতত উপেক্ষা করে, পূর্ণসংখ্যার রূপান্তরকে নির্দেশকারী একটি বাস্তবায়ন-সংজ্ঞায়িত আচরণ )
int * my_int_ptr = 2;
my_int_ptr
একটি ভেরিয়েবল (টাইপ পয়েন্টার টু টু int
), এর নিজস্ব একটি ঠিকানা রয়েছে (টাইপ: ইন্ডিটারের দিকে নির্দেশকের ঠিকানা), আপনি সেই ঠিকানার 2
মধ্যে একটি মান সংরক্ষণ করছেন ।
এখন, my_int_ptr
একটি পয়েন্টার টাইপ হচ্ছে, আমরা তা বলতে পারেন, যে স্থানটিকে মেমরির অবস্থানে "টাইপ" -র মান দ্বারা নির্দিষ্ট অনুষ্ঠিত মান my_int_ptr
। সুতরাং, আপনি মূলত মান বরাদ্দ করা হয় এর পয়েন্টার ভেরিয়েবল, না মেমরি অবস্থানকে মান পয়েন্টার দ্বারা দিকে ইঙ্গিত করলেন।
সুতরাং, উপসংহার জন্য
char *x=NULL;
সূচনা পয়েন্টার ভেরিয়েবল x
থেকে NULL
, না মেমরি অ্যাড্রেস মান পয়েন্টার দ্বারা প্রতি ইঙ্গিত ।
এই হিসাবে একই
char *x;
x = NULL;
সম্প্রসারণ:
এখন, কঠোরভাবে অনুসরণ করা হচ্ছে, একটি বিবৃতি মত
int * my_int_ptr = 2;
এটি অবৈধ, কারণ এতে সীমাবদ্ধতা লঙ্ঘন জড়িত। স্পষ্ট করা,
my_int_ptr
একটি পয়েন্টার ভেরিয়েবল, টাইপ int *
- সংজ্ঞা অনুসারে একটি পূর্ণসংখ্যা ধ্রুবক
2
এর টাইপ থাকে int
।
এবং সেগুলি "সামঞ্জস্যপূর্ণ" ধরণের নয়, সুতরাং লন্ডিনের উত্তরে বর্ণিত অধ্যায় §6.5.16.1 / পি 1 এ উল্লিখিত সহজ কার্যনির্বাহী বিধি লঙ্ঘন করার কারণে এই সূচনাটি অবৈধ ।
যদি কারও আগ্রহী যে কীভাবে C11
সূচনাটি সহজ নিয়োগের সীমাবদ্ধতার সাথে উদ্ধৃত করা হয় , অধ্যায় §6.7.9, পি 11
স্কেলারের জন্য ইনিশিয়ালাইজারটি একটি একক অভিব্যক্তি হবে option অবজেক্টের প্রাথমিক মান হ'ল অভিব্যক্তি (রূপান্তরের পরে); সাধারণ অ্যাসাইনমেন্ট হিসাবে একই ধরণের বাধা এবং রূপান্তরগুলি প্রয়োগ করে, স্কেলারের প্রকারটিকে তার ঘোষিত প্রকারের অযোগ্য সংস্করণ হিসাবে গ্রহণ করে।
int *x = whatever;
করে এবং কীint *x; *x = whatever;
করে তার মধ্যে একটি বিভ্রান্তিকর পার্থক্য রয়েছে ।int *x = whatever;
আসলে মত আচরণ করেint *x; x = whatever;
, না*x = whatever;
।