前言
在C语言中,我们有时候看到NULL,有时候也看到'\0',那它们之间有什么区别呢?
本质
本质来说,NULL,0,'\0'都是一样的,都是值0。是的,你没有听错。它们虽然值都是0,但是含义却是不一样的。
NULL
虽然值是0,但是它的含义不一样,或者说它的类型不一样。NULL是指针类型,不过它是空指针,即值为0。
实际上NULL通常是如下定义:
#define NULL (void*)0
所以,如果要给一个指针类型初始化,那么你给它一个NULL,使得能够明显的看到这是一个指针。
当然,在C++中,你更应该使用nullptr,而不是NULL。
'\0'
我们都知道\是转义符,用单引号包起来,再加转义,实际上就是0,只不过它表示的是字符。就向下面这样:
//nul.c
#include<stdio.h>
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;
"0"
用双引号包裹的0是字符串,我们看不到的是它结尾还有一个’\0‘
#include<stdio.h>
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
这也是字符串,只不过是两个空字符。使用strlen计算字符串长度为0。
字符串。字符串长度为1,占用空间2字节,是一个空格加空字符。
文章浏览阅读791次。1.dubbo服务开发流程,运行流程?zookeeper注册中心的作用?小疑问: 为什么发布服务需要用到spring容器啊?答: spring容器存储该服务,然后spring就会帮我们发布服务,注册到注册中心上去(常见注册中心比如zookeeper)2.redis为什么可以做缓存?项目中使用redis的目的是什么?redis什么时候使用?小疑问:为什么redis可以用来生成订单号,访问量..._电商公司招程序员java
文章浏览阅读9k次。现在的模拟发送请求插件很多比如老外的postman等,但亲测咱们国内的 ApiPost 更好用一些,因为它不仅可以模拟发送get、post、delete、put请求,还可以导出文档,支持团队协作也是它的特色。另外老外的思维跟我们还是有些鸿沟,相对来说ApiPost的中文界面更适合国内的程序员。今天来分享如何使用ApiPost发送各种请求。1、下载ApiPost官方提供chrome插件、window客户端、mac客户端下载,最好在ApiPost的官网下载。不过个人建议安装客户端。使用更灵活。亲自试了下_在线http
文章浏览阅读449次。精选30+云产品,助力企业轻松上云!>>> Hado..._hadoop1.0和2.0项目结构
文章浏览阅读270次。首先是安装ROS,我所用的ubuntu16.04,所安装的ROS是kinetic版本,安装请参考:ubuntu16.04安装ROS1.管理环境变量在前面的安装过程中,配置亮环境,此时来查看ROS环境是否配置成功:export | grep ROS植入命令之后会出现如下信息:如果没有就需要重新输入添加环境变量的命令。2.创建ROS工作空间通过创建ros工作站,也..._接下来首先source一下新生成的setup.*sh文件:
文章浏览阅读5.4k次,点赞16次,收藏171次。一、Lattice(Frenet)二、EM三、Opt(OSQP)/IPOPT汇总四、Hybrid A*/圆弧Lattice以上算法结合感知决策等框架,是否能覆盖大多数场景?L2/L4,辅助驾驶、矿区、环卫、Robotaxi、泊车、无人接驳车、农用、Robobus、物流配送、Robotruck新势力、Tier1、计算平台?工业界的仿真、量产、数据?..._apollo古月居
文章浏览阅读731次。先简单介绍一下矩阵乘法求斐波那契数列的原理f(n) 是第n项的值。f(1)= 1; f(2) =1;f(n)= f(n-1) + (n-2)下面的介绍是我从网上查到了,收益匪浅。分两步推导: 问题的求解就变成的解决,而幂的求可用二分法来求。二分法可用递归和非递归来求:下面是代码:定义矩阵struct matrix //定义2*2的矩阵&nb_矩阵乘法算波拉契法吗
文章浏览阅读1.3k次。一、单机模式就是安装一个redis,启动起来,业务调用即可有什么问题?单机故障 容量瓶颈 QPS瓶颈只适合一些性能不高、可靠性不用太强的业务系统。二、主从复制模式可以解决单机模式的单机故障问题外,还有好处:读写分离 容灾备份假设我们要搭建1主2从,分别是6379、6380、6381端口6379主节点redis.conf配置文件不需要动,只把6380、6381两个从节点redis.conf配置文件增加一行(配置主节点的ip端口)slaveof 127.0.0_redis 6379 6380
文章浏览阅读2.3w次,点赞36次,收藏102次。一、我们发现ACM的latex模板中会有ACM Reference Format信息,如下:投稿时,可以使用如下的方法将其去掉,在 \documentclass[sigconf]{acmart}下面直接添加这几行即可去掉\settopmatter{printacmref=false} % Removes citation information below abstract\re..._settopmatter
文章浏览阅读2.5k次。1.最外层div加上 -webkit-overflow-scrolling属性,解决ios滑动不流畅.div {-webkit-overflow-scrolling: touch;}2.外层div里面的所有元素添加 -webkit-transform: translateZ(0px)属性,解决滑动时出现的空白(即图片不显示).div > * {-webkit-transform:..._ios h5 卡
文章浏览阅读1.1k次。numpy.random.seed, torch.manual_seed使用_args.seed % 2**32
文章浏览阅读1.1k次。原文:http://mobile.51cto.com/aprogram-387591.htm/**_android 将assert文件写入sd卡中
文章浏览阅读434次。属性动画是3.0推出的新特性,和View动画不同,他对对象进行了扩展,属性动画可以对任何对象做动画.在Animator框架中使用最多的就是AnimatorSet和ObjectAnimator配合,使用ObjectAnimator进行更精细化控制,只控制一个对象的属性值,使用多个ObjectAnimator组合到AnimatorSet中形成一个动画. 在这里说明,动画默认的时间间隔是300ms,默认_android 属性动画 缩放代码