আমি 0 টির মানটির জন্য বিকল্প হিসাবে ব্যবহার করতে পারি?


73

আমি কি NULLএর মানটির প্রতিস্থাপন হিসাবে পয়েন্টারটি ব্যবহার করার অনুমতি দিচ্ছি?0 ?

নাকি এই কাজ করে কোন ভুল আছে?


উদাহরণস্বরূপ:

int i = NULL;

প্রতিস্থাপন হিসাবে:

int i = 0;

পরীক্ষা হিসাবে আমি নিম্নলিখিত কোডটি সংকলন করেছি:

#include <stdio.h>

int main(void)
{
    int i = NULL;
    printf("%d",i);

    return 0;
}

আউটপুট:

0

প্রকৃতপক্ষে এটি আমাকে এই সতর্কতা দেয়, যা এটি নিজে থেকে সম্পূর্ণ সঠিক:

warning: initialization makes integer from pointer without a cast [-Wint-conversion] 

কিন্তু ফলাফল এখনও সমতুল্য।


  • আমি কি এটি দিয়ে "অনির্ধারিত আচরণে" পার করছি?
  • NULLএভাবে ব্যবহার করা কি জায়েজ ?
  • NULLপাটিগণিতের এক্সপ্রেশনগুলিতে একটি সংখ্যাসূচক মান হিসাবে ব্যবহারে কোনও ভুল আছে কি ?
  • এবং এই ক্ষেত্রে সি ++ এ ফলাফল এবং আচরণ কী?

আমি উত্তর পড়া আছে কি শূন্য মধ্যে পার্থক্য '0 \' এবং 0, কি মধ্যে পার্থক্য সম্পর্কে NULL, \0এবং 0, কিন্তু আমি সেখান থেকে সংক্ষিপ্ত তথ্য পান নি, যদি ব্যবহার করার অধিকার বেশ অনুমোদনযোগ্য এবং NULLযেমন অ্যাসাইনমেন্ট এবং অন্যান্য গাণিতিক ক্রিয়াকলাপগুলির সাথে পরিচালনা করার মান।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
স্যামুয়েল লিউ

দুটি পৃথক প্রশ্ন জিজ্ঞাসা করা আরও ভাল হবে, একটি সি এর জন্য এবং একটি সি ++ এর জন্য।
কনরাড রুডলফ

উত্তর:


82

আমি কি 0 এর মান প্রতিস্থাপন হিসাবে NULL পয়েন্টার ব্যবহার করার অনুমতি দিচ্ছি?

না , এটি করা নিরাপদ নয়। NULLএকটি নাল পয়েন্টার ধ্রুবক, যা টাইপ করতে পারে int, তবে যা সাধারণত সাধারণত টাইপ void *(সি মধ্যে), বা অন্যথায় সরাসরি int(সি ++> = 11) এ নির্ধারিত নয় । উভয় ভাষাই পয়েন্টারগুলিকে পূর্ণসংখ্যায় রূপান্তর করতে দেয় তবে এ জাতীয় রূপান্তর স্পষ্টভাবে সম্পাদনের জন্য সরবরাহ করে না (যদিও কিছু সংকলক এটি এক্সটেনশান হিসাবে সরবরাহ করে)। তদতিরিক্ত, যদিও মান 0 পাওয়ার জন্য একটি নাল পয়েন্টারটিকে একটি পূর্ণসংখ্যার সাথে রূপান্তর করার পক্ষে সাধারণ, মানটি গ্যারান্টি দেয় না। আপনি যদি টাইপ intএবং মান 0 সহ ধ্রুবক চান তবে তা বানান করুন 0

  • আমি কি এটি দিয়ে অনির্ধারিত আচরণে যেতে পারি?

হ্যাঁ, যে কোনও বাস্তবায়নের ক্ষেত্রে যেখানে NULLটাইপ সহ কোনও মান প্রসারিত হয় void *বা অন্য কোনওর কাছে সরাসরি নির্ধারিত নয় int। মান এই জাতীয় প্রয়োগের ক্ষেত্রে আপনার কার্যভারের আচরণকে সংজ্ঞায়িত করে না, এর আচরণটি পূর্বনির্ধারিত।

  • সেই উপায়ে NULL নিয়ে কাজ করা কি জায়েজ?

এটি খারাপ স্টাইল, এবং এটি কিছু সিস্টেমে এবং কিছু পরিস্থিতিতে ভেঙে যাবে। আপনি যদি জিসিসি ব্যবহার করছেন বলে মনে হয় তবে আপনি -Werrorবিকল্পটি সংকলন করলে এটি আপনার নিজের উদাহরণে ভঙ্গ হবে ।

  • পাটিগণিতের এক্সপ্রেশনগুলিতে NULL কে সংখ্যার মান হিসাবে ব্যবহার করার বিষয়ে কিছু ভুল আছে?

হ্যাঁ. এটি কোনও সংখ্যাসূচক মান থাকার গ্যারান্টিযুক্ত নয়। যদি আপনার 0 টি বোঝায় তবে 0 লিখুন, যা কেবলমাত্র সংজ্ঞায়িত নয়, তবে খাটো এবং আরও পরিষ্কার।

  • এবং সেই ক্ষেত্রে সি ++ এর ফলাফল কীভাবে হবে?

সি ++ ভাষা সি থেকে রূপান্তর সম্পর্কে কঠোর এবং এর জন্য বিভিন্ন বিধি রয়েছে NULL, তবে সেখানেও বাস্তবায়নগুলি এক্সটেনশান সরবরাহ করতে পারে। আবার, আপনি যদি 0 বলতে চান তবে এটি আপনার লেখার উচিত।


4
আপনি বাতলান উচিত যে "আরো সাধারণত টাইপ যা void *" সি একমাত্র সত্য void *(কারণ আপনি ধার্য করতে পারেন না সি জন্য একটি আইনি প্রকার নয় ++, void*অন্য কোন পয়েন্টার টাইপ)। সি ++ 89 এবং সি ++ 03 এ আসলে টাইপের হতে NULL হবেint তবে পরবর্তী সংস্করণগুলিতে এটি হতে পারে (এবং সাধারণত হয়) nullptr_t
মার্টিন বোনার

এছাড়াও আপনি ভুল রূপান্তর void*করতে intঅনির্ধারিত আচরণ। এইটা না; এটি বাস্তবায়ন নির্দিষ্ট আচরণ।
মার্টিন বোনার

@ মার্টিনবোনার্সপোর্টসমোনিকা, সেই প্রসঙ্গে যেখানে সি নির্দিষ্ট করে যে কোনও পয়েন্টার একটি পূর্ণসংখ্যায় রূপান্তরিত হয়, সেখানে রূপান্তরটির ফলাফলটি বাস্তবায়ন-নির্দিষ্ট করে দেওয়া হয়, তবে আমি এটাকেই বলছি না। এটি পূর্বনির্ধারিত আচরণের (সুস্পষ্টভাবে কোনও কাস্টের মাধ্যমে রূপান্তর না করে) পূর্ণসংখ্যার ধরণের লভ্যালুতে পয়েন্টার নির্ধারণ করা that ভাষা সেখানে কোনও স্বয়ংক্রিয় রূপান্তর সংজ্ঞায়িত করে না।
জন বলিঞ্জার

@ মার্টিনবোনার্সপোর্টস মনিকা, আমি সি ++ বিবেচনার সাথে আরও অন্তর্ভুক্ত হওয়ার জন্য সম্পাদনা করেছি। যে কোনও ইভেন্টে, কেন্দ্রীয় থিম উভয় ভাষায় সমানভাবে প্রযোজ্য: আপনি যদি একটি পূর্ণসংখ্যা 0 চান তবে উপযুক্ত ধরণের পূর্ণসংখ্যার ধ্রুবক হিসাবে এটি স্পষ্টভাবে লিখুন।
জন বলিঞ্জার

31

NULLকিছু নাল পয়েন্টার ধ্রুবক। সিতে এটি মান সহ একটি পূর্ণসংখ্যক ধ্রুবক অভিব্যক্তি হতে পারে 0বা এই জাতীয় অভিব্যক্তি নিক্ষেপ করা যেতে পারে void*, সম্ভবত আরও পরে। যার অর্থ আপনি শূন্যের সাথে বিনিময়যোগ্যভাবে অনুমান করতে পারবেন নাNULL । উদাহরণস্বরূপ, এই কোড নমুনা

char const* foo = "bar"; 
foo + 0;

প্রতিস্থাপন করা হচ্ছে 0সঙ্গে NULLনিশ্চিত করা হয় না, একটি বৈধ সি প্রোগ্রাম হতে কারণ দুই পয়েন্টার (বিভিন্ন পয়েন্টার ধরনের একা থাকতে দাও) মধ্যে উপরন্তু সংজ্ঞায়িত করা হয় না। সীমাবদ্ধতা লঙ্ঘনের কারণে এটি ডায়াগনস্টিক জারি করতে পারে। সংযোজনের জন্য অপারেশনগুলি বৈধ হবে না


সি ++ এর ক্ষেত্রে বিষয়গুলি কিছুটা আলাদা। void*অন্যান্য অবজেক্টের ধরণের থেকে অন্তর্নিহিত রূপান্তরটির অভাবের অর্থ এটি সি ++ কোড NULLহিসাবে 0historতিহাসিকভাবে সংজ্ঞায়িত হয়েছিল । সি ++ এ, আপনি সম্ভবত এটির সাথে দূরে যেতে পারেন। কিন্তু যেহেতু সি ++ 11 এটা আইনত করতে হিসাবে সংজ্ঞায়িত করা nullptrশব্দ । এখন আবার একটি ত্রুটি তৈরি হচ্ছে, যেহেতু std::nullptr_tপয়েন্টার টাইপের সাথে যুক্ত করা যাবে না।

যদি NULLসংজ্ঞায়িত হয় nullptrতবে আপনার পরীক্ষাটিও অবৈধ হয়ে যায় becomes std::nullptr_tপূর্ণসংখ্যা থেকে কোনও রূপান্তর হয় না । এজন্য এটিকে একটি নিরাপদ নাল পয়েন্টার ধ্রুবক হিসাবে বিবেচনা করা হয়।


সম্পূর্ণতার জন্য, 0 এল একটি নাল পয়েন্টার ধ্রুবক এবং NULLউভয় ভাষায় ব্যবহার করা যেতে পারে ।
এরেরিকা

1
@ জেমসেকফ স্ট্যান্ডার্ডটি বলে যে মান 0 সহ পূর্ণসংখ্যার ধ্রুবকটি নাল পয়েন্টার ধ্রুবক। সুতরাং 0 এল একটি নাল পয়েন্টার ধ্রুবক।
এরেরিকা

1
@ সম্রাটিকা: বিশ্বের কী প্রয়োজন, বাস্তবতা উপেক্ষা করে এমন মানদণ্ডগুলি :-) 'যদি আমি আমার ৮০২66 অ্যাসেম্বলিটি সঠিকভাবে মনে রাখি, আপনি এমনকি একটি একক অপারেশন হিসাবে খুব বেশি পয়েন্টারও অর্পণ করতে পারবেন না, তাই সংকলক লেখকরা বিশেষ -কেস।
jamesqf

2
@ জেমসেকফ সি সি এফকিউ অনুসারে পুনরায়: 0একটি নাল পয়েন্টারকে ধ্রুবক করে তুলেছেন : "স্পষ্টতই সমস্ত প্রচলিত খারাপ লেখা-লেখা সি কোডের এক ঝাঁক হিসাবে যা ভুল অনুমান করেছিল"
অ্যান্ড্রু হেনেল

3
@ জামেস্কেফ, যে মান এবং 0 এর সাথে প্রতিটি পূর্ণসংখ্যার ধ্রুবক একটি নাল পয়েন্টার ধ্রুবক (সি তে) এর সাথে হার্ডওয়্যার পয়েন্টার বাস্তবায়নের কোনও সম্পর্ক নেই। এও নোট করুন যে স্ট্যান্ডার্ড সি কোনও ক্ষেত্রে নিকট এবং দূরবর্তী পয়েন্টারগুলির মধ্যে পার্থক্যকে স্বীকৃতি দেয় না, তবে পয়েন্টার-টু-পয়েন্টার অ্যাসাইনমেন্টগুলিকে সমর্থন করে। এটি (কিছু) পয়েন্টার তুলনাগুলিও সমর্থন করে, যা 286 এর মত বিভাজনযুক্ত ঠিকানা ফর্ম্যাটগুলির জন্য আকর্ষণীয় সমস্যা উপস্থাপন করে।
জন বলিঞ্জার

21

আমি কি 0 টির মানটির প্রতিস্থাপন হিসাবে NULL পয়েন্টারটি ব্যবহার করতে পারি?

int i = NULL;

ভাষা এবং তাদের সংস্করণগুলির মধ্যে বিধিগুলি পৃথক হয়। কিছু কিছু ক্ষেত্রে আপনি যা করতে পারেন এবং অন্যদের, আপনি করতে পারেন না। নির্বিশেষে, আপনি করা উচিত নয় । আপনি যদি ভাগ্যবান হন তবে আপনার সংকলক সতর্ক করবে যখন আপনি এটি চেষ্টা করার চেষ্টা করবেন বা আরও ভাল, সংকলন করতে ব্যর্থ হন।

সি ++ এ, সি ++ 11 এর আগে (সি ++ থেকে উদ্ধৃতি):

[Lib.support.types]

NULL হ'ল এই আন্তর্জাতিক মানকটিতে একটি বাস্তবায়ন-সংজ্ঞায়িত সি ++ নাল পয়েন্টার।

একটি পূর্ণসংখ্যা হিসাবে নাল পয়েন্টার ধ্রুবকটি ব্যবহার করা সামান্য জ্ঞান করে। যাহোক...

[Conv.ptr]

একটি নাল পয়েন্টার ধ্রুবক হল পূর্ণসংখ্যার ধরণের একটি অবিচ্ছেদ্য ধ্রুবক প্রকাশ (5.19) যা শূন্যকে মূল্যায়ন করে।

সুতরাং, এটি অযৌক্তিক হলেও এটি প্রযুক্তিগতভাবে কাজ করবে। এই প্রযুক্তিগততার কারণে, আপনি খারাপভাবে লিখিত প্রোগ্রামগুলির মুখোমুখি হতে পারেন যা অপব্যবহার করেNULL

যেহেতু সি ++ ১১ (সর্বশেষ খসড়া থেকে উদ্ধৃতি):

[Conv.ptr]

একটি নাল পয়েন্টার ধ্রুবক শূন্য মান একটি পূর্ণসংখ্যা আক্ষরিক ([lex.icon]) হচ্ছে বা টাইপ এসটিডি একটি prvalue :: nullptr_t

std​::​nullptr_­tএকটি পূর্ণসংখ্যার সাথে রূপান্তরযোগ্য নয়, সুতরাং NULLপূর্ণাঙ্গ হিসাবে ব্যবহারটি ভাষা শর্তাদির দ্বারা গৃহীত নির্বাচনের উপর নির্ভর করে কেবল শর্তযুক্তভাবে কাজ করবে।

পিএস nullptrহ'ল প্রকারের মূল্য std​::​nullptr_­t। প্রি-সি ++ 11 এ সংকলনের জন্য আপনার প্রোগ্রামটির প্রয়োজন না থাকলে আপনার nullptrপরিবর্তে সর্বদা ব্যবহার করা উচিত NULL


সি কিছুটা আলাদা (সি 11 খসড়া এন 1548 থেকে উদ্ধৃতি):

.3.৩.২.৩ ভাষা / রূপান্তর / অন্যান্য অপারেশন / পয়েন্টার

3 মান 0 সহ একটি পূর্ণসংখ্যক ধ্রুবক এক্সপ্রেশন বা টাইপের জন্য এই জাতীয় অভিব্যক্তি নিক্ষিপ্তvoid * হয় তাকে নাল পয়েন্টার ধ্রুবক বলে। ...

সুতরাং, কেস পোস্টের সাথে সি ++ 11 অর্থাত্ NULLভাষা প্রয়োগের মাধ্যমে করা পছন্দগুলির উপর নির্ভর করে শর্তাধীন কাজের অপব্যবহারের অনুরূপ ।


10

হ্যাঁ , যদিও বাস্তবায়নের উপর নির্ভর করে আপনি পারেন একটি কাস্টের প্রয়োজন । তবে হ্যাঁ, এটি 100% বৈধ, অন্যথায়।

যদিও এটি সত্যই, সত্যই, সত্যই খারাপ শৈলী (বলা বাহুল্য?)।

NULL, অথবা ছিল, আসলে না সি ++, এটা সি মান নেই তবে মত অনেক সি উত্তরদায় জন্য, দুই ক্লজ ([diff.null] এবং [support.types.nullptr]) যা টেকনিক্যালি করা আছে NULLসি ++। এটি একটি বাস্তবায়ন-সংজ্ঞায়িত নাল-পয়েন্টার ধ্রুবক । অতএব, এটি খারাপ স্টাইল হলেও এটি প্রযুক্তিগতভাবে এটি সি ++ এর মতোই হতে পারে। পাদটীকাতে
নির্দেশিত হিসাবে , সম্ভাব্য বাস্তবায়নগুলি হতে পারে বা হতে পারে , তবে তা নয়00L (void*)0

NULLহতে পারে, অবশ্যই (স্ট্যান্ডার্ডটি স্পষ্টভাবে এটি বলে না, তবে এটি পরে 0বা পরে কেবলমাত্র একমাত্র পছন্দ বাকী রয়েছে 0L) হতে পারেnullptr । এটি প্রায়শই হয় না, তবে এটি একটি আইনী সম্ভাবনা।

সংকলক আপনাকে যে সতর্কতাটি দেখিয়েছিল তা প্রমাণ করে যে সংকলকটি আসলে অনুগত নয় (যদি আপনি সি মোডে সংকলন না করেন)। কারণ, ভাল, সতর্কতা অনুসারে, এটি একটি নাল পয়েন্টারকে রূপান্তরিত করেছিল ( nullptrযা হবে না যা পৃথক হবে nullptr_t), সুতরাং স্পষ্টতই সংজ্ঞাটি NULLপ্রকৃতপক্ষে (void*)0, যা এটি নাও হতে পারে।

যেভাবেই হোক, আপনার দুটি সম্ভাব্য বৈধ (যেমন সংকলকটি ভাঙ্গা হয়নি) ক্ষেত্রে রয়েছে have হয় (বাস্তববাদী কেস), এর NULLমতো কিছু হয় 0বা 0L, তারপরে আপনার "শূন্য বা একটি" থাকে পূর্ণসংখ্যার সাথে রূপান্তর হয় এবং আপনি যেতে ভাল।

বা NULLসত্যিই হয় nullptr। যে ক্ষেত্রে আপনি একটি স্বতন্ত্র মান তুলনা সেইসাথে পরিষ্কারভাবে সংজ্ঞায়িত ধর্মান্তর সম্পর্কে নিশ্চয়তা আছে যে আছে থেকে পূর্ণসংখ্যার কিন্তু Unluckily না করতে পূর্ণসংখ্যার। তবে এর স্পষ্টভাবে সংজ্ঞায়িত রূপান্তর আছে bool(এর ফলে false) এবং boolএর পূর্ণসংখ্যাতে পরিস্কারভাবে সংজ্ঞায়িত রূপান্তর রয়েছে (ফলস্বরূপ 0)।

দুর্ভাগ্যক্রমে, এটি দুটি রূপান্তর, সুতরাং এটি "শূন্য বা এক" এর মধ্যে [কনফিউশন] -তে উল্লিখিত নয়। সুতরাং, যদি আপনার বাস্তবায়ন NULLহিসাবে সংজ্ঞায়িত nullptrহয় তবে আপনার কোডটি সঠিক হওয়ার জন্য আপনাকে একটি স্পষ্ট কাস্ট যোগ করতে হবে।


6

সি ফ্যাক থেকে:

প্রশ্ন: NULL এবং 0 নাল পয়েন্টার ধ্রুবক হিসাবে সমতুল্য হয়, আমি কোনটি ব্যবহার করব?

উত্তর: এটা পয়েন্টার প্রেক্ষিতে যে শুধুমাত্র হয় NULLএবং 0সমতুল্য। অন্য ধরণের 0 প্রয়োজন হলে এটি ব্যবহার করা NULLউচিত নয় , যদিও এটি কাজ করে, কারণ এটি করার ফলে ভুল স্টাইলিস্টিক বার্তা প্রেরণ হয়। (তদ্ব্যতীত, এএনএসআই NUL এর সংজ্ঞা হতে দেয় ((void *)0), যা বিন্দুবিহীন প্রেক্ষাপটে মোটেও কাজ করবে না particular) বিশেষত, NULLযখন ASCII নাল অক্ষর (NUL) পছন্দ হয় তখন ব্যবহার করবেন না । আপনার নিজস্ব সংজ্ঞা প্রদান করুন

http://c-faq.com/null/nullor0.html


5

দাবি অস্বীকার: আমি সি ++ জানি না। আমার উত্তরটি C ++ এর প্রসঙ্গে প্রয়োগ করা উচিত নয়

'\0'একটি হল intমান শূন্য দিয়ে শুধু 100% ঠিক মত, 0

for (int k = 10; k > '\0'; k--) /* void */;
for (int k = 10; k > 0; k--) /* void */;

পয়েন্টার প্রসঙ্গে , 0এবং NULL100% সমতুল্য আছেন:

if (ptr) /* ... */;
if (ptr != NULL) /* ... */;
if (ptr != '\0') /* ... */;
if (ptr != 0) /* ... */;

সমস্ত 100% সমতুল্য।


সম্পর্কে নোট ptr + NULL

প্রেক্ষাপটে ptr + NULLহয় না পয়েন্টার যে। সি ভাষায় পয়েন্টার সংযোজনের কোনও সংজ্ঞা নেই; পয়েন্টার এবং পূর্ণসংখ্যা যোগ করা যেতে পারে (বা বিয়োগ)। ইন ptr + NULLযদি পারেন ptrবা NULLএকটি পয়েন্টার, অন্যান্য হওয়া আবশ্যক , একটি পূর্ণসংখ্যা তাই ptr + NULLকার্যকরভাবে হয় (int)ptr + NULLবা ptr + (int)NULLএবং সংজ্ঞা উপর নির্ভর করে ptrএবং NULLবিভিন্ন আচরণে আশা করা যেতে পারে: এটা সব পরিশ্রমী, পয়েন্টার এবং পূর্ণসংখ্যা, কম্পাইল করার ব্যর্থতার মধ্যে রূপান্তরের জন্য সতর্কীকরণ, .. ।


আগেও দেখেছি #define NULL (void *)0। আপনি কি নিশ্চিত যে নাল এবং সরল 0 টি 100% সমতুল্য?
মেশিন_115

2
পয়েন্টার প্রসঙ্গে, হ্যাঁ ... শর্ত আমার উত্তর জোর, আপনাকে ধন্যবাদ
PMG

@ ফুকলভ: সি ++ সম্পর্কে আমার একেবারেই ধারণা নেই। আমার উত্তর (প্রথম বন্ধনী মধ্যে বিট ব্যতীত)
15

@ ফুকলিভ পয়েন্টারগুলির প্রসঙ্গে ptr + NULLব্যবহার করছে নাNULL
15:30 এ পিএমজি

3
@ জেসপারজুহল: পয়েন্টারগুলির প্রসঙ্গে তারা 100% সমতুল্য। আমি কী nullptrজানি না, তবে ((void*)0)এবং 0(বা '\0') পয়েন্টারগুলির প্রসঙ্গে সমান ...if (ptr == '\0' /* or equivalent 0, NULL */)
pmg

5

না, আর ব্যবহার করতে পছন্দ করেন না NULL (পয়েন্টার প্রবর্তনের পুরাতন উপায়)।

সি ++ 11:

কীওয়ার্ডটি nullptrপয়েন্টারটিকে আক্ষরিক নির্দেশ করে। এটি std :: nullptr_t প্রকারের একটি মূল্যবান। যে nullptrকোনও পয়েন্টার টাইপের নাল পয়েন্টার মান এবং সদস্য পয়েন্টের কোনও পয়েন্টার থেকে অন্তর্ভুক্ত রূপান্তরগুলি রয়েছে । যে কোনও নাল পয়েন্টার ধ্রুবকের জন্য অনুরূপ রূপান্তরগুলি বিদ্যমান, এতে std::nullptr_tম্যাক্রোর পাশাপাশি টাইপের মান অন্তর্ভুক্ত থাকে NULL

https://en.cppreference.com/w/cpp/language/nullptr

আসলে, std :: nullptr_t হল নাল পয়েন্টার আক্ষরিক ধরণের nullptr,। এটি একটি স্বতন্ত্র প্রকার যা নিজেই কোনও পয়েন্টার টাইপ বা সদস্য প্রকারের জন্য কোনও পয়েন্টার নয়।

#include <cstddef>
#include <iostream>

void f(int* pi)
{
   std::cout << "Pointer to integer overload\n";
}

void f(double* pd)
{
   std::cout << "Pointer to double overload\n";
}

void f(std::nullptr_t nullp)
{
   std::cout << "null pointer overload\n";
}

int main()
{
    int* pi; double* pd;

    f(pi);
    f(pd);
    f(nullptr);  // would be ambiguous without void f(nullptr_t)
    // f(0);  // ambiguous call: all three functions are candidates
    // f(NULL); // ambiguous if NULL is an integral null pointer constant 
                // (as is the case in most implementations)
}

আউটপুট:

Pointer to integer overload
Pointer to double overload
null pointer overload

প্রশ্নটি হল পূর্ণসংখ্যার জন্য 0 0 0 0 0 0 এই অর্থে, নুলপিটারের পরিবর্তে নুলপিটারের সাথে কিছুই পরিবর্তন হয় না।
ivan.ukr

তিনি "NULL পয়েন্টার" হিসাবে শব্দ ব্যবহার করেছিলেন।
মান্নোজ

যাইহোক, সি ++ সি ++ এর পরে NULL ধারণা নেই। লেখক কনস্টেক্সপ্র ব্যবহার বা পুরানো উপায় সূচনা সংজ্ঞায়নের বিষয়ে বিভ্রান্ত হতে পারে। en.cppreferences.com/w/cpp/language/default_initialization
মান্নোজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.