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

面试题 相关文章推荐
如何强制垃圾回收
Oct 06 面试题
Jar包的作用是什么
Mar 30 面试题
公司JAVA开发面试题
Apr 02 面试题
Java工程师面试集锦之Spring框架
Jun 16 面试题
存储过程和函数的区别
May 28 面试题
.net开发工程师面试题
Feb 25 面试题
什么是虚拟内存?虚拟内存有什么优势?
Feb 19 面试题
abstract class和interface有什么区别
Aug 04 面试题
万户网络JAVA程序员岗位招聘笔试试卷
Jan 08 面试题
shell的种类有哪些
Apr 15 面试题
UNIX文件系统常用命令
May 25 面试题
Java面试题冲刺第十七天--基础篇3
Aug 07 面试题
声明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
改造一台复古桌面收音机
2021/03/02 无线电
用php实现的下载css文件中的图片的代码
2010/02/08 PHP
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
2014/12/18 NodeJs
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
vue之延时刷新实例
2019/11/14 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
详细介绍Python的鸭子类型
2016/09/12 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
python实现Virginia无密钥解密
2019/03/20 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
精彩的大学生自我评价
2013/11/17 职场文书
给国外客户的邀请函
2014/01/30 职场文书
信息技术教学反思
2014/02/12 职场文书
班训口号大全
2014/06/18 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
使用goaccess分析nginx日志的详细方法
2021/07/09 Servers