博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言NULL和0区别
阅读量:2036 次
发布时间:2019-04-28

本文共 1289 字,大约阅读时间需要 4 分钟。

转载自:

先看下面一段代码输出什么:

#include
int main(){    int *p=NULL;    printf("%s",p); }

输出(null) ,单步调试可以看出执行int *p=NULL,p的值为0x00000000,可以看出,NULL在实际底层调用中就是0,

在中,

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

对于字符串的结尾,使用'\0',它的值也是0,但是让人一看就知道这是字符串的结尾,不是指针,也不是普通的数值

在不同的系统中,

NULL并非总是和0等同,NULL仅仅代表空值,也就是指向一个不被使用的地址,在大多数系统中,都将0作为不被使用的地址,所以就有了类似这样的定义

#define NULL 0

但并非总是如此,也有些系统不将0地址作为NULL,而是用其他的地址,所以说,千万别将NULL和0等价起来,特别是在一些跨平台的代码中,这更是将给你带来灾难。

看下面解释:

问 0 '0' '\0' "\0"

 

To me, when doing C/C++:

 

0 would digit zero, that is, a numerical value.

 

'0' could be the character capital oh or the character zero. For example: char word[10] = "Oxford"; char number[10] = "01234";

 

Depending on typeface used 'O' may look exactly like '0' making it difficult to tell them apart out of context.

 

'\0' is the null character used to terminate strings in C/C++.

 

"\0" is an empty string.

百度百科解释;

\0是C++中字符串的结尾标志,存储在字符串的结尾。比如char cha[5]表示可以放5个字符的字符串,由于c/c++中规定字符串的结尾标志为'\0',它虽然不计入串长,但要占内存空间,而一个汉字一般用两个字节表示,且c/c++中如一个cha[5],有5个变量,分别是 cha[0] , cha[1] , cha[2] , cha[3] , cha[4] , 所以cha[5]可以放5个字母或者放2个汉字(1个汉字占2个字节,1个字母占一个字节),cha[5]占5个字节内存空间.

  例如:

char str[5];    str[0]='a';    str[1]='b';    str[2]='c';    str[3]='d';    //str[4]='\0'; //abcd    str[4]='e'; /*这样输出就是abcde和一堆乱码,甚至跳出系统错误,因为没有字符串结尾符*/    printf("%s",str);
你可能感兴趣的文章
shutdown和shutdownNow--多线程任务的关闭
查看>>
Thread.currentThread.interrupt()
查看>>
JVM实用参数(七)CMS收集器
查看>>
nginx 已有80端口服务如何在开启一个非80端口的静态资源指向
查看>>
nginx root静态资源地址默认路径
查看>>
redis多个线程操作单个key场景的并发问题
查看>>
textArea没有value 属性 如何显示
查看>>
java项目搭建流程记录
查看>>
让hql支持按位与运算
查看>>
修改maven打包出来的war名称
查看>>
Windows下 Git 的基本操作
查看>>
java List转换为字符串并加入分隔符的方法
查看>>
mysql 嵌套查询
查看>>
一个空指针异常null==1
查看>>
maven聚合项目 打包时候先整体install
查看>>
java web 工程名后面设置访问默认url
查看>>
Mysql字符串字段判断是否包含某个字符串的2种方法
查看>>
eclipse去掉无用的validation
查看>>
svn 的基本操作 checkout
查看>>
The user operation is waiting for background work to complete
查看>>