একটি পয়েন্টার 0x0000 পয়েন্টারটি কি একইভাবে NUL তে সেট করা পয়েন্টার হিসাবে সমান? সিউলে যদি NULL মানটি সংজ্ঞায়িত করা হয়, তবে এটি শারীরিকভাবে কোন স্থানে অনুবাদ করে? এটি কি 0x0000 এর মতো? আমি এই ধারণাগুলি সম্পর্কে আরও বিশদ কোথায় পেতে পারি?
একটি পয়েন্টার 0x0000 পয়েন্টারটি কি একইভাবে NUL তে সেট করা পয়েন্টার হিসাবে সমান? সিউলে যদি NULL মানটি সংজ্ঞায়িত করা হয়, তবে এটি শারীরিকভাবে কোন স্থানে অনুবাদ করে? এটি কি 0x0000 এর মতো? আমি এই ধারণাগুলি সম্পর্কে আরও বিশদ কোথায় পেতে পারি?
উত্তর:
একটি বিন্দু যা এখানে বেশিরভাগ উত্তরগুলি সম্বোধন করছে না, কমপক্ষে স্পষ্টভাবে নয়, তা হ'ল নাল পয়েন্টারটি এমন একটি মান যা কার্যকর করার সময় বিদ্যমান, এবং একটি নাল পয়েন্টার ধ্রুবক একটি সিনট্যাকটিক গঠন যা সি উত্স কোডে বিদ্যমান।
একটি নাল পয়েন্টার ধ্রুবক , যেমন কার্লসনের উত্তর সঠিকভাবে বলেছে, হয় মান 0 (একটি 0সাধারণ সর্বাধিক সাধারণ উদাহরণ) সহ একটি পূর্ণসংখ্যক ধ্রুবক অভিব্যক্তি , বা এ জাতীয় অভিব্যক্তি void*(যেমন (void*)0) cast
NULLএকটি ম্যাক্রো, সংজ্ঞায়িত <stddef.h>এবং অন্যান্য বেশ কয়েকটি মানক শিরোনাম, এটি একটি বাস্তবায়ন-সংজ্ঞায়িত নাল পয়েন্টার ধ্রুবকে প্রসারিত করে । প্রসারণটি সাধারণত হয় হয় 0বা ((void*)0)(অন্যান্য ভাষার নিয়ম মেটানোর জন্য বাহ্যিক বন্ধনীগুলির প্রয়োজন হয়)।
সুতরাং একটি আক্ষরিক 0, যখন একটি প্রসঙ্গে ব্যবহৃত হয় যা পয়েন্টার ধরণের অভিব্যক্তি প্রয়োজন, সর্বদা একটি হিসাবে null pointerঅর্থাত্, একটি অনন্য পয়েন্টার মান যা কোনও বস্তুর দিকে নির্দেশ করে তা মূল্যায়ন করে । এটি নাল পয়েন্টারের উপস্থাপনা সম্পর্কে কিছু বোঝায় না । নাল পয়েন্টারগুলিকে খুব সাধারণভাবে সমস্ত বিট-শূন্য হিসাবে উপস্থাপন করা হয় তবে এগুলি যে কোনও কিছু হিসাবে উপস্থাপন করা যায়। কিন্তু এমনকি যদি একটি নাল পয়েন্টার হিসাবে প্রতিনিধিত্ব করা হয় , বা এখনও একটি হল নাল পয়েন্টার ধ্রুবক ।0xDEADBEEF0(void*)0
এই উত্তরটি করার Stackoverflow প্রশ্ন এই ভাল জুড়ে।
এটি অন্যান্য জিনিসের সাথে বোঝায় যে memset()বা calloc()যা, যা সমস্ত বিট-শূন্যকে মেমরির একটি অঞ্চল সেট করতে পারে, অগত্যা সেই অঞ্চলে কোনও পয়েন্টারকে নাল পয়েন্টারে সেট করবে না। তারা সম্ভবত বেশিরভাগ বাস্তবায়নে এমনটি করতে পারে তবে ভাষা এটির গ্যারান্টি দেয় না।
আমি কেন এই প্রশ্ন সদৃশ বিবেচনা করা হয় না জানি না এই এক , বা কিভাবে তা এখানে সাময়িক আছে।
NULLকোনও পয়েন্টার অবজেক্টে নির্ধারিত , বা কোনও নাল পয়েন্টার স্থির , সেই বস্তুর মান একটি নাল পয়েন্টারকে সেট করে । যন্ত্রের স্তরে এটি মেমরির কিছু বৈধ অংশকে ভালভাবে নির্দেশ করতে পারে। একটি নাল পয়েন্টার নির্ধারণ করার সাথে আচরণের সংজ্ঞা নেই; 0x0000000আক্ষরিক অন্য কিছু যেমন ঠিকানায় মেমরির একটি অংশ অ্যাক্সেস করা বৈধ আচরণ। এই ঠিকানাটি অন্য কোনও ঠিকানার থেকে (ক) সমান তুলনা করে NULLএবং (খ) সি অবজেক্টের সাথে কোনও পয়েন্টারের সাথে অসম তুলনা করে পৃথক করা অন্য ঠিকানা থেকে পৃথক । নাল পয়েন্টার একটি নির্বিচার পয়েন্টার মান যা এটি কোনও কিছুর প্রতি নির্দেশ দেয় না তা বোঝাতে ব্যবহৃত হয়।
বাহিরের প্রতিটি প্ল্যাটফর্ম NUL এর পছন্দ অনুসারে সংজ্ঞায়িত করতে পারে।
সি স্ট্যান্ডার্ড অনুসারে, আপনি যদি কোনও পয়েন্টারে শূন্য অর্পণ করেন তবে এটি একটি ন্যূনাল মানতে রূপান্তরিত হবে (সেই প্ল্যাটফর্মের জন্য However) তবে, আপনি যদি কোনও NULL পয়েন্টার নেন এবং এটি পূর্বে কাস্ট করেন তবে আপনার শূন্যের কোনও নিশ্চয়তা নেই বাইরে প্রতিটি প্ল্যাটফর্মে। তবে আসল বিষয়টি হ'ল বেশিরভাগ প্ল্যাটফর্মে এটি শূন্য হবে।
সি স্টাফের স্পেসিফিকেশনে আপনি যে জিনিসগুলি পেতে পারেন সে সম্পর্কে তথ্য । একটি উত্স, যে বিশ্বাসযোগ্যতাটির জন্য আমি প্রমাণ করতে পারি না, তা হ'ল: http://www.winapi.co.kr/pds/doc/ISO-C-FDIS.1999-04.pdf
NULL pointer constant। আমি যতদূর জানি যে সেখানে কোনও সংকলক নেই যে এটি করে।
NULLম্যাক্রোর সংজ্ঞা হিসাবে থাকতে পারে , যা 0সি ++ এবং অন্যথায় 0বা সিতে প্রসারিত হতে হবে (void *)0, কারণ এটিই আসল "নাল পয়েন্টার ধ্রুবক"।
এটি সি ভাষায় সংজ্ঞায়িত হয়েছে কারণ এটির সাথে সমতুল্য কোনও মেশিন ঠিকানা নেই। যদি এটি হয় তবে আমাদের এটি থেকে কোনও বিমূর্ততা প্রয়োজন হবে না! যদিও বেশিরভাগ প্ল্যাটফর্মে, নূলে শেষ পর্যন্ত কিছু প্রকার বা অন্য কোনও হিসাবে 0 প্রয়োগ করা যেতে পারে, আপনি যদি একেবারেই বহনযোগ্যতার বিষয়ে চিন্তা করেন তবে এটি সর্বজনীনভাবে ধরে নেওয়া সহজভাবে ভুল।
মতে সি স্ট্যান্ডার্ড ডকুমেন্ট অধ্যায় 6.3.2.3:
মান 0 এর সাথে একটি পূর্ণসংখ্যক ধ্রুবক অভিব্যক্তি বা শূন্য * টাইপ করার জন্য এই জাতীয় এক্সপ্রেশনকে নাল পয়েন্টার ধ্রুবক বলা হয় 5৫) যদি নাল পয়েন্টার ধ্রুবকটি একটি পয়েন্টার ধরণের রূপান্তরিত হয় তবে ফলস্বরূপ পয়েন্টারটিকে নাল পয়েন্টার বলা হয় is কোনও অবজেক্ট বা ফাংশনের সাথে একটি পয়েন্টারের সাথে অসম তুলনা করার গ্যারান্টিযুক্ত।
এখনও অবধি আমি এমন কোনও সংকলক দেখিনি যা এ থেকে দূরে চলেছে।