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...

面试题 相关文章推荐
寻找迷宫的一条出路,o通路;X:障碍
Jul 10 面试题
编写类String 的构造函数、析构函数和赋值函数
Sep 09 面试题
如何查询Oracle数据库中已经创建的索引
Oct 11 面试题
介绍一下SQL注入攻击的种类和防范手段
Feb 18 面试题
关于Assembly命名空间的三个面试题
Jul 23 面试题
什么是WEB控件?使用WEB控件有哪些优势?
Jan 21 面试题
linux面试题参考答案(3)
Sep 13 面试题
Linux机考试题
Oct 16 面试题
几道Java和数据库的面试题
May 30 面试题
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
Jun 20 面试题
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Jan 27 面试题
一套英文Java笔试题面试题
Apr 21 面试题
声明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
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
javascript 网页跳转的方法
2008/12/24 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
JavaScript中防止微信浏览器被整体拖动的方法
2017/08/25 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
Django values()和value_list()的使用
2020/03/31 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
python爬虫爬取网页数据并解析数据
2020/09/18 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
简述安装Slackware Linux系统的过程
2012/01/12 面试题
保险内勤岗位职责
2014/04/05 职场文书
小学数学课题方案
2014/06/15 职场文书
计算机求职信
2014/07/02 职场文书
群众路线四风自我剖析材料
2014/10/08 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
在Django中使用MQTT的方法
2021/05/10 Python
详解MySQL中的主键与事务
2021/05/27 MySQL
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
Python面向对象之内置函数相关知识总结
2021/06/24 Python