int *p=NULL和*p= NULL有什么区别


Posted in 面试题 onOctober 23, 2014
很多初学者都无法分清这两者之间的区别。我们先看下面的代码:
int *p = NULL;
这时候我们可以通过编译器查看p 的值为0×00000000。这句代码的意思是:定义一个指针变量p,其指向的内存里面保存的是int 类型的数据;在定义变量p 的同时把p 的值设置为0×00000000,而不是把*p 的值设置为0×00000000。这个过程叫做初始化,是在编译的时候进行的。
明白了什么是初始化之后,再看下面的代码:
int *p;
*p = NULL;
同样,我们可以在编译器上调试这两行代码。第一行代码,定义了一个指针变量p,其指向的内存里面保存的是int 类型的数据;但是这时候变量p 本身的值是多少不得而知,也就是说现在变量p 保存的有可能是一个非法的地址。第二行代码,给*p 赋值为NULL,即给p指向的内存赋值为NULL;但是由于p 指向的内存可能是非法的,所以调试的时候编译器可能会报告一个内存访问错误。这样的话,我们可以把上面的代码改写改写,使p 指向一块合法的内存:
int i = 10;
int *p = &i;
*p = NULL;
在编译器上调试一下,我们发现p 指向的内存由原来的10 变为0 了;而p 本身的值, 即内存地址并没有改变。
经过上面的分析,相信你已经明白它们之间的区别了。不过这里还有一个问题需要注意,也就是这个NULL。初学者往往在这里犯错误。
注意NULL 就是NULL,它被宏定义为0:
#define NULL 0
很多系统下除了有NULL外,还有NUL(Visual C++ 6.0 上提示说不认识NUL)。NUL 是ASCII码表的第一个字符,表示的是空字符,其ASCII 码值为0。其值虽然都为0,但表示的意思完全不一样。同样,NULL 和0 表示的意思也完全不一样。一定不要混淆。
另外还有初学者在使用NULL 的时候误写成null 或Null 等。这些都是不正确的,C 语言对大小写十分敏感啊。当然,也确实有系统也定义了null,其意思也与NULL 没有区别,但是你千万不用使用null,这会影响你代码的移植性。

Tags in this post...

面试题 相关文章推荐
介绍java中初始化块的使用
Sep 11 面试题
C++:局部变量能否和全局变量重名
Mar 03 面试题
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
May 18 面试题
DataList 能否分页,请问如何实现?
May 03 面试题
能否解释一下XSS cookie盗窃是什么意思
Jun 02 面试题
Linux不知道文件后缀名怎么判断文件类型
Aug 21 面试题
斯福泰克软件测试面试题
Feb 16 面试题
测试驱动开发的主要步骤是什么
Dec 10 面试题
解释一下钝化(Swap out)
Dec 26 面试题
GWT (Google Web Toolkit)有哪些主要的原件组成?
Jun 08 面试题
Java程序开发中如何应用线程
Mar 03 面试题
北京振戎融通Java面试题
Sep 03 面试题
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
Jun 02 #面试题
函数指针的定义是什么
Aug 14 #面试题
一个C/C++编程面试题
Nov 10 #面试题
Sony C++笔试题
Mar 10 #面试题
VC++笔试题
Oct 13 #面试题
写出程序把一个链表中的接点顺序倒排
Apr 28 #面试题
浙大网新C/C++面试解惑
May 27 #面试题
You might like
PHP 事件机制(2)
2011/03/23 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
2011/06/04 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
PHP 500报错的快速解决方法
2016/12/14 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
JS中JSON对象和String之间的互转及处理技巧
2016/04/06 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
python学习笔记:字典的使用示例详解
2014/06/13 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
对python中的pop函数和append函数详解
2018/05/04 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
Haggar官网:美国男装品牌
2020/02/16 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
.net开发工程师面试题
2014/02/25 面试题
中职应届生会计求职信
2013/10/23 职场文书
英语专业推荐信
2013/11/16 职场文书
数字化校园建设方案
2014/05/03 职场文书
土木工程求职信
2014/05/29 职场文书
2015年三万活动总结
2015/03/25 职场文书
HTTP中的Content-type详解
2022/01/18 HTML / CSS