NULL, '\0',0 '0'的区别及32位和64位类型大小
来源:互联网 发布:淘宝哪家羽绒服是正品 编辑:程序博客网 时间:2024/06/10 01:59
如题,在程序中经常遇到NULL,和'\0',常常疑惑它们是什么关系,其实它们的值是一样的,只不过表现的形式不一样:
1、NULL; NULL 即空指针,在C和C++中的形式不一样,msdn上有如下的内容那个:
#if !defined(NULL)&&defined(__NEEDS_NULL)
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
NULL 在c中用(void*)0表示,在c++中用0表示。
2、'\0':'\0'表示字符串结束,它在ASCII中的值为0(数值0,非字符‘0’)
所以在数值上NULL,'\0',0是一样的,都是0,但'0'就不同了,在ASCII码中编码为48,所以字符0和上述三个值不同。
在内存中NULL 和'\0' 和'0'都是一个8位的char类型,NULL 和'\0' 值一样,都是0,以数字方式读取就是0,以字符串读取时就是'\0'或者null(和编译器有关),而‘0’在内存存储着48,以字符读取就是'0',以数字读取就是48,至于0,可能是char ,int ,float,double等类型,但是值和NULL和'\0'一样,都是0
printf("%d",'0');==>48
printf("%c",'0');==>0
printf("%c",0);==>空(即NULL)
printf("%d",0);==>0
那么0+'0',0+'\0'分别是什么呢?
printf("%c",0+'\0');==>空(NULL) 先转换成int,然后ASCII编码相加为0,%c输出,转换成char,所以输出NULL
printf("%d",0+'\0');==>0 先转换成int,然后ASCII编码相加为0,%d输出,不用转换,输出数字0
printf("%c",0+'0');==>0
printf("%d",0+'0');==>48
转载地址:http://blog.csdn.net/mylinx/article/details/6873253
#include <iomanip>
using namespace std;
double xxxxx = 38.992992;
cout<<setiosflags(ios::fixed)<<setprecision(2) << xxxxx << endl;
会保留2位小数点 输出38.99
http://c.biancheng.net/cpp/biancheng/view/2227.html
#define NULL 0int *p = NULL;对指针变量赋0值和不赋值是不同的。指针变量未赋值时,值是随机的,是垃圾值,不能使用的,否则将造成意外错误。而指针变量赋0值后,则可以使用,只是它不指向具体的变量而已。
int型字长问题:
① C/C++规定int字长和机器字长相同;
② 操作系统字长和机器字长未必一致;
③ 编译器根据操作系统字长来定义int字长;
由上面三点可知,在一些没有操作系统的嵌入式计算机系统上,int的长度与处理器字长一致;有操作
系统时,操作系统的字长与处理器的字长不一定一致,此时编译器根据操作系统的字长来定义int字长:"
比如你在64位机器上运行DOS16系统,那么所有for dos16的C/C++编译器中int都是16位的;在64位机器上
运行win32系统,那么所有for win32的C/C++编译器中int都是32位的"
常见基本类型的字节大小
32位操作系统
char :1个字节(固定)
*(即指针变量): 4个字节(32位机的寻址空间是4个字节。同理64位编译器)(变化*)
short int : 2个字节(固定)
int: 4个字节(固定)
unsigned int : 4个字节(固定)
float: 4个字节(固定)
double: 8个字节(固定)
long: 4个字节
unsigned long: 4个字节(变化*,其实就是寻址控件的地址长度数值)
long long: 8个字节(固定)
64位操作系统
char :1个字节(固定)
*(即指针变量): 8个字节
short int : 2个字节(固定)
int: 4个字节(固定)
unsigned int : 4个字节(固定)
float: 4个字节(固定)
double: 8个字节(固定)
long: 8个字节
unsigned long: 8个字节(变化*其实就是寻址控件的地址长度数值)
long long: 8个字节(固定)
除了*与long随操作系统子长变化而变化外,其他的都固定不变(32位和64相比)
bool 1个字节 char 1个字节 int 4个字节 float 4个字节 doubl 8个字节 long long 8个字节
short int x = 65536; //cout << x << endl; // 输出结果为0 因为上面65536是int型截断转换为short int year = 2009;int *p = &year;*p++; // *和++优先级是一样的,但是按照自右向左的顺序 故为先p++ 再取值cout << year << endl;cout << *p << endl;
- NULL, '\0',0 '0'的区别及32位和64位类型大小
- 关于32位和64位的类型大小
- 32位和64位操作系统及软件的区别
- 64位和32位的区别
- 32位和64位系统内置数据变量的大小区别
- 32位操作系统和64位操作系统的数据类型大小
- 32位和64位的c语言数值类型的区别
- 32位和64位系统区别及字节对齐
- c++32位系统和64位系统中类型的字节区别
- C#控制台基础 泛型中default的用法,值类型位0,引用类型为null
- 64位基本类型的大小
- 32位和64位的区别以及如何查看是32位还是64位
- 求32位数中有几位非0位及最低非0位和最高非0位的方法
- JVM虚拟机32位和64位的探索(转发 jvm32位、64位区别 )
- 电脑内存与操作系统32位和64位的关系及两者区别
- eclipse32位和64位的区别
- 用代码看32位和64位的区别
- 电脑32位和64位操作系统的区别
- c# 字段和属性
- 编译中的算符优先分析程序
- 7 第七天【健身】
- 成长点滴-Web发布-您未被授权查看该页
- 总结几个很好用但经常记不住用的vim命令。
- NULL, '\0',0 '0'的区别及32位和64位类型大小
- 实现省市级联效果
- 网络编程中的read,write函数
- 第2章 2.6 JSP脚本
- Ant之build.xml分析
- 编译中的基于算符优先分析程序的语法制导翻译
- Framework编译AIDL文件
- c语言基础-分支语句和循环语句
- 九度 题目1205:N阶楼梯上楼问题