c语言null是什么意思,c语言null什么意思?

您所在的位置:网站首页 null什么意思中文 c语言null是什么意思,c语言null什么意思?

c语言null是什么意思,c语言null什么意思?

2023-12-15 04:15| 来源: 网络整理| 查看: 265

9a0f09e064a46087f8a3028b78e91ab9.png

在C语言中,NULL和0的值都是一样的,但是为了目的和用途及容易识别的原因,NULL用于指针和对象,0用于数值。

NULL就是系统定义特殊的0,把你初始化的指针指向它,可以防止“野指针”的恶果。

C语言中又定义,定义如下:#undef NULL

#if defined(__cplusplus)

#define NULL 0

#else

#define NULL ((void *)0)

#endif

所以我觉得,如果一个指针被赋予NULL,应该就相当于这个指针执行了0x0000这个逻辑地址,但是C语言中0x0000这个逻辑地址用户是不能使用的(有些人说是因为0x0000没有映射到物理地址,也有人说是因为0x0000映射到的地址是操作系统用于判断野指针的,我也不太懂,总之就是用户不能使用啦),所以当你试图取一个指向了NULL的指针的内容时,就会提示段错误,听着有点绕,看程序:int *node=NULL;

int a=0;

a=*node;

printf("%d\n",a);

由于node执行的是NULL,也就是逻辑地址0x0000,而这个地址用于是不能访问的,所以编译器提示段错误。

还在网上看到了一个面试题,和这个问题有关,分享一下:#include

void fun(int *node)

{

static int N=100;

node=&N;

}

int main()

{

int *node=NULL;

int a=0;

fun(node);

a=*node;

printf("%d\n",a);

return 0;

}

运行结果依然是段错误。因为函数是值传递,node指针变量的值并没有被改变,所以这个程序的效果和上一个程序的效果是一样的。

如果要让结果为100,应该怎样写代码呢? 答案是 传递node指针变量的指针给fun,也就是传递一个二级指针,当然相应的fun函数也应该做出改变,代码如下:#include

void fun(int ** node)

{

static int N=100;

*node=&N;

}

int main()

{

int *node=NULL;

int a=0;

fun(&node);

a=*node;

printf("%d\n",a);

return 0;

}

更多web开发知识,请查阅 HTML中文网 !!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3