• 乐乐百科已全面开放注册功能欢迎各位注册!

‘/0’(null,0,’\0’,“0”,”\0″你真的分得清吗?) – 乐乐百科-凯发平台

软件教程 小莫 1周前 (04-08) 19次浏览 0个评论

前言

在c语言中,我们有时候看到null,有时候也看到’\0’,那它们之间有什么区别呢?

本质

本质来说,null,0,’\0’都是一样的,都是值0。是的,你没有听错。说到这本文差不多应该结束了。不过为了不被打,还是继续说一说。它们虽然值都是0,但是含义却是不一样的。

null

虽然值是0,但是它的含义不一样,或者说它的类型不一样。null是指针类型,不过它是空指针,即值为0。

//来源:公众号【编程珠玑】 博客:https://www.yanbinghu.com
//null.c
#include
int main(void)
{
 int a = null;
 printf("%p\n",a);
 return 0;
}

我们编译它:

$ gcc -o null null.c
null.c: in function ‘main’:
null.c:14:10: warning: initialization makes integer from pointer without a cast [-wint-conversion]
 int a = null;
 ^

它给了我们一个警告,提示尝试将指针转换为整数。这也就正验证了我们前面的说法。

实际上null通常是如下定义:

#define null (void*)0

所以,如果要给一个指针类型初始化,那么你给它一个null,使得能够明显的看到这是一个指正。

当然,在c 中,你更应该使用nullptr,而不是null。

‘\0’

我们都知道\是转义符,用单引号包起来,再加转义,实际上就是0,只不过它表示的是字符。就向下面这样:

//来源:公众号【编程珠玑】 博客:https://www.yanbinghu.com
//nul.c
#include
int main(void)
{
 char a = '\0';
 char b = '0';
 printf("a = %d,b = %d\n",a,b);
 return 0;
}

编译运行:

$ gcc -o nul nul.c
./nul
a = 0,b = 48

我们最常见到的就是它作为字符串的结束符。所以我们常常会看到下面这样的写法:

char str[16];
/*do something*/
str[15] = '\0';

还记得printf是如何打印字符串,以及strcmp比较停止规则吗?是的,它们都以遇到’\0’结束。

注意,它和’0’完全不一样。通过打印就可以看到了,实际上’\0’的值就是0。

需要特别注意的是,如果’\0’的0后面跟八进制的数,则会被转义。所以’\60’与’0’的值一致。

0

这个不用多解释。

int a = 0;

>微信公众号【编程珠玑】:专注但不限于分享计算机编程基础,linux,c语言,c ,数据结构与算法,工具,资源等编程相关[原创]技术文章。

原文地址:

“0”

用双引号包裹的0是字符串,我们看不到的是它结尾还有一个’\0‘

#include
int main(void)
{
 char str[] = "0";
 printf("sizeof str is %d,string len is %d\n",sizeof(str),strlen(str));
 return 0;
}

运行结果:

sizeof str is 2,string len is 1

“\0”

这也是字符串,只不过是两个空字符。使用strlen计算字符串长度为0。

” “

字符串。字符串长度为1,占用空间2字节,是一个空格加空字符。

总结

到这里你应该明白了,它们的值可能一样,但赋予的含义却不一样,为了代码良好的可读性,你应该在恰当的时候使用合适的值。


凯发平台的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 [email protected],本站将立刻删除。
发表我的评论

表情

hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址