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的区别联系相关推荐

  1. C语言NULL和0的区别及NULL详解

    #include<stdo.h> int main() {int *p=NULL;printf("%s",p);} 上面这个代码输出的是NULL. 单步调试可以看出执行 ...

  2. C++中null与0的区别

    0是一个数字,本身有着一些原生的特性诸如:起始,没有,正负的分界线,0/1中的0还可以表示否定. NULL用于将指针指定为空指针,也就是说该指针不指向任何对象,不可以对该指针进行解引用,否则系统会报错 ...

  3. c语言stdio中null的值,C/C++编程笔记:C语言NULL值和数字 0 值区别及NULL详解

    原创 程序员无言 2020-07-01 在学习C语言的时候,我们常常会碰到C语言NULL值和数字 0 ,很多小伙伴搞不清楚他们之间的一个区别,今天我们就了解一下他们之间的区别,一起来看看吧! 先看下面 ...

  4. a href=#与 a href=javascript:void(0) 的区别

    a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP<a href="javascript:void(0)" onCli ...

  5. C语言 NULL 和 0 区别 - C语言零基础入门教程

    目录 一.关于 NULL 定义 二.NULL 和 0 区别 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.关于 NULL 定义 NU ...

  6. c语言Null详解,c语言NULL和0区别及NULL详解(示例代码)

    先看下面一段代码输出什么: #include int main() { int *p=NULL; printf("%s",p); } 输出 ,单步调试可以看出执行int *p=NU ...

  7. c语言NULL和0区别及NULL详解

    转载于一位牛人:http://www.cnblogs.com/youxin/archive/2012/03/27/2420023.html ~(翻译是我自己理解翻译的,嘻嘻,难免会有错误还请多多指点) ...

  8. c+语言+null,C/C++语言中NULL、'\0’和0的区别

    NULL.'\0'和0的值是一样的,都是0,不过它们的表现形式不一样: 1. NULL: 即空指针,不过在C和C++中并不一样.在VS 2013的库文件string.h中可以看到如果定义. 1 /* ...

  9. href=#与href=javascript:void(0)的区别

    href="#"与href="javascript:void(0)"的区别 # 包含了一个位置信息,默认的锚是#top 也就是网页的上端. 而javascrip ...

最新文章

  1. 人工智能免费公开课一网打尽!14个类别、230门课程,GitHub标星6000+
  2. 三十五、深入Java中的泛型(下篇)
  3. 对模块开发卷宗的理解_【基层】模块化办案模式?高大上啊!
  4. BootStrap 提示框
  5. 让OpenCV2.4.9支持虚拟环境python3.5
  6. javascript设计模式研究学习-设计模式类别
  7. Requested registry access is not allowed 解决办法
  8. L2-001. 紧急救援(PAT)~最短路应用
  9. 【空间分析】2 空间数据符号化
  10. 【论文笔记】韩家炜团队AutoPhrase:自动短语挖掘
  11. kubernetes mysql pxc_PXC快速入门
  12. Chrome浏览器主页被hao123、360和2345篡改恢复到默认的方法
  13. FPGA开发中常见报错或警告汇总
  14. B站高管解读财报:要更快实现盈亏平衡 陈睿亲自盯减亏工作
  15. MiniMap(小地图)插件
  16. 一个在国内外使用广泛的精密电阻品牌介绍
  17. 测试基础--测试方法
  18. ICSE (2022). Nessie的阅读记录
  19. 公路广告牌问题(Highway Billboard Problem)--动态规划
  20. mysql练习题记录之:学生表、课程表、成绩表、讲师表、等级表

热门文章

  1. 正方体最快最简单画_素描新手入门第一幅画可不只是“正方体”
  2. python3连接数据库失败_python3使用pymysql连接mysql数据库报Keyerror
  3. php关联数组和哈希表,php遍历哈希表及关联数组的实例代码
  4. nginx post请求超时_nginx记录分析网站响应慢的请求(ngx_http_log_request_speed)
  5. 头部ct能检查出什么_【安全用药】做CT检查时应注意什么?
  6. c语言大乐透编译,Excel大乐透摇号vba代码分享,说不定就中百万了呢
  7. c#endread怎么打印出来_打印机打印出来是白板是怎么回事
  8. 160 - 32 genocide1
  9. python脚本:向表中插入新数据,删除表中最旧的数据
  10. 矩阵形状| 使用Python的线性代数