登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

ideality

@linux c 编程@

 
 
 

日志

 
 
 
 

c语言NULL和0区别(转)  

2013-05-30 12:41:17|  分类: netfilter |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

#include<stdo.h>
int main()
{
    int *p=NULL;
    printf("%s",p);
 
}

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

在C语言中,

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);
  

  评论这张
 
阅读(554)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018