آیا null و 0 با هم برابرند؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

وبـــلاگ هــفت خــط کــد


آموزش های برنامه نویسی
۱۶۵ نفر آنلاین
۰ عضو و ۱۶۵ مهمان در سایت حاضرند

آیا null و 0 با هم برابرند؟

+2 امتیاز
115 بازدید
دوستان آیا null و صفر با هم یکی هستند؟

شما فرض کنید من یه تابع دارم که شرطش اینه ، اگه این تابع null برگردوند ، تو بیا بگو این تابع خروجی ندارد.

حالا شاید این تابع بخاد 0 که یه دیتا هست و برگردونه، اونوقت آیا c++ فکر میکنه که تابع NULL رو بگردوند؟

آیا اینجا تفاوتی بین NULL و 0 وجود داره؟

با تشکر.
سوال شده شهریور 28, 1393  بوسیله ی hosseinam1370 (امتیاز 208)   3 29
تا جایی که می‌دونم فرقی ندارن: http://stackoverflow.com/questions/1296843/what-is-the-difference-between-null-0-and-0

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

سلام. بستگی به این داره که درc++ کجا استفاده بشن. فرض کن یک متغیر از نوع int تعریف می کنی اگه این متغیر رو برابر با NULL قرار بدی و چاپش کنی مقدار صفر رو نشون میده و در اینجا null با صفر برابره. اما اگه یک متغیر از نوع اشاره گر باشه و برابر NULL قرار بدی اشاره به خانه صفر میکنه و وقتی مقدار اشاره گر را چاپ کنی عدد 00000000 را چاپ میکنه و این خانه حافظه فاقد مقداره (در این متغیر آدرس حافظه قرار گرفته شده است). اما نمی تونی یک اشاره گر رو برابر صفر قرار بدی چون که صفر مقداره و خانه حافظه نیست (مثلا اینطوری int *x = 0)!

#include <iostream>
using namespace std;
int main()
{
	int x = NULL;
	cout << "X= " << x << endl;
	int *y = NULL;
	cout << "y= " << y << endl;
	y = &x;
	cout << "y= " << y << endl;
	cin.get();
}

 

ویرایش:

بهتره زمانی که میخوای بگی که اشاره گر به جایی اشاره نمی کنه به جای اینکه از صفر استفاده کنی از NULL استفاده کن. این باعث خوانایی کد میشه. برای مثال.

int var = 20;
int *ptr = 0;
ptr = &var;
*ptr = 0;

در کد بالا خط دومش صفر به اشاره گر null اشاره می کنه اما در خط چهارم به مقدار صفر integer اشاره می کنه.

پاسخ داده شده شهریور 28, 1393 بوسیله ی Pashmak (امتیاز 799)   2 7 29
اشاره گر رو می‌شه برابر صفر قرار داد.
NULL توی ++C همیشه صفر تعریف شده و فرقی با صفر نداره .
int *x=0 با int* x=NULL فرقی نداره پس میشه اشاره گر رو صفر گذاشت ولی نمیشه مقدار اون خونه از حافظه رو گرفت( یعنی derefrence نمیشه   مثلا cout<<*x ارور میده )
البته بهتره بجای NULL از معادل 11++C که nullptr هست استفاده بشه که بر خلاف NULL که ماکرو هست یک keyword مخصوصه که دیباگ رو راحت تر می کنه و ضمنی به int هم تبدیل نمیشه .
درسته اشاره گر رو هم میشه برابر صفر قرار داد
در سی پلاس پلاس NULL به صورت زیر توی فایل stdio.h تعریف شده
#define NULL 0
این یعنی NULL همون صفره
...