void ,NULL与0的区别联系
void ,NULL及0的区别联系
void的详解:
void的字面意思是“无类型”或“空类型”,void*则为“无针型指针”,那就意味着void*可以指向任何类型的数据。
众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值,不会出现问题;但如果p1和p2指向不同的数据类
型,则必须使用强制类型转换
运算符把赋值符号两边的类型转换为相同类型或兼容的类型,即就是把赋值运算符右边的指针类型转换为左边指针的类型。
例如:
float *p1;
int *p2;
p1 = p2;
其中p1= p2语句会编译出现警告
In function ‘main’:
15:7: warning:assignment from incompatible pointer type [enabled by default]
提示我们第十五行的赋值类型不兼容
而改成p1= (float *)p2;才正确;
而void*则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换:
void*p1;
int *p2;
p1 = p2;
但这并不意味着,void*也可以无需强制类型转换地赋给其它类型的指针。因为“无类型”可以包容“有类型”,而“有类型”则不能包容“无类型”。道理很简
单,我们可以说“男人和女人都是人”,但不能说“人是男人”或者“人是女人”。
下面的语句编译出错或警告:
void *p1;
int *p2;
p2 = p1;
在C语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。但是许多人却误以为其为void类型。例如:
add ( int a, int b )
{
return a + b;
}
int main(int argc,char* argv[])
{
printf ( "2 + 3= %d", add ( 2, 3) );
}
程序运行的结果为输出:
2 + 3 = 5
这说明不加返回值说明的函数的确为int函数。
NULL详解:
运行:
#include<stdo.h>
int main()
{
int *p=NULL;
printf("%s",p);
}
输出:(null)
gdb调试可以看出执行int*p=NULL,p的值为0x00000000,可以看出,NULL在实际底层调用中就是0。
而NULL在C语言的stdio.h头文件里面的定义为:
#if!defined(NULL) && defined(__NEEDS_NULL)
#ifdef__cplusplus
#defineNULL 0
#else
#defineNULL ((void *)0)
#endif
#endif
由此可见,在C语言中,NULL和0的值可以说是一样的,但是为了不同目的和用途及容易识别的原因,NULL用于指针和对象中,0用
于数值
对于字符串的结尾,使用'\0',它的值也是0,但是让人一看就知道这是字符串的结尾,不是指针,也不是普通的数值。在不同的系统
中,NULL并非总是和0等
同,NULL仅仅代表空值,也就是指向一个不被使用的地址,在大多数系统中,都将0作为不被使用的地址,所以就有了类似这样的
定义
#defineNULL 0
但并非总是如此,也有些系统不将0地址作为NULL,而是用其他的地址。
转载于:https://www.cnblogs.com/csdndreamer/p/5490656.html
void ,NULL与0的区别联系相关推荐
- C语言NULL和0的区别及NULL详解
#include<stdo.h> int main() {int *p=NULL;printf("%s",p);} 上面这个代码输出的是NULL. 单步调试可以看出执行 ...
- C++中null与0的区别
0是一个数字,本身有着一些原生的特性诸如:起始,没有,正负的分界线,0/1中的0还可以表示否定. NULL用于将指针指定为空指针,也就是说该指针不指向任何对象,不可以对该指针进行解引用,否则系统会报错 ...
- c语言stdio中null的值,C/C++编程笔记:C语言NULL值和数字 0 值区别及NULL详解
原创 程序员无言 2020-07-01 在学习C语言的时候,我们常常会碰到C语言NULL值和数字 0 ,很多小伙伴搞不清楚他们之间的一个区别,今天我们就了解一下他们之间的区别,一起来看看吧! 先看下面 ...
- a href=#与 a href=javascript:void(0) 的区别
a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP<a href="javascript:void(0)" onCli ...
- C语言 NULL 和 0 区别 - C语言零基础入门教程
目录 一.关于 NULL 定义 二.NULL 和 0 区别 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.关于 NULL 定义 NU ...
- c语言Null详解,c语言NULL和0区别及NULL详解(示例代码)
先看下面一段代码输出什么: #include int main() { int *p=NULL; printf("%s",p); } 输出 ,单步调试可以看出执行int *p=NU ...
- c语言NULL和0区别及NULL详解
转载于一位牛人:http://www.cnblogs.com/youxin/archive/2012/03/27/2420023.html ~(翻译是我自己理解翻译的,嘻嘻,难免会有错误还请多多指点) ...
- c+语言+null,C/C++语言中NULL、'\0’和0的区别
NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* ...
- href=#与href=javascript:void(0)的区别
href="#"与href="javascript:void(0)"的区别 # 包含了一个位置信息,默认的锚是#top 也就是网页的上端. 而javascrip ...
最新文章
- 人工智能免费公开课一网打尽!14个类别、230门课程,GitHub标星6000+
- 三十五、深入Java中的泛型(下篇)
- 对模块开发卷宗的理解_【基层】模块化办案模式?高大上啊!
- BootStrap 提示框
- 让OpenCV2.4.9支持虚拟环境python3.5
- javascript设计模式研究学习-设计模式类别
- Requested registry access is not allowed 解决办法
- L2-001. 紧急救援(PAT)~最短路应用
- 【空间分析】2 空间数据符号化
- 【论文笔记】韩家炜团队AutoPhrase:自动短语挖掘
- kubernetes mysql pxc_PXC快速入门
- Chrome浏览器主页被hao123、360和2345篡改恢复到默认的方法
- FPGA开发中常见报错或警告汇总
- B站高管解读财报:要更快实现盈亏平衡 陈睿亲自盯减亏工作
- MiniMap(小地图)插件
- 一个在国内外使用广泛的精密电阻品牌介绍
- 测试基础--测试方法
- ICSE (2022). Nessie的阅读记录
- 公路广告牌问题(Highway Billboard Problem)--动态规划
- mysql练习题记录之:学生表、课程表、成绩表、讲师表、等级表
热门文章
- 正方体最快最简单画_素描新手入门第一幅画可不只是“正方体”
- python3连接数据库失败_python3使用pymysql连接mysql数据库报Keyerror
- php关联数组和哈希表,php遍历哈希表及关联数组的实例代码
- nginx post请求超时_nginx记录分析网站响应慢的请求(ngx_http_log_request_speed)
- 头部ct能检查出什么_【安全用药】做CT检查时应注意什么?
- c语言大乐透编译,Excel大乐透摇号vba代码分享,说不定就中百万了呢
- c#endread怎么打印出来_打印机打印出来是白板是怎么回事
- 160 - 32 genocide1
- python脚本:向表中插入新数据,删除表中最旧的数据
- 矩阵形状| 使用Python的线性代数