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

面试题 相关文章推荐
Collection和Collections的区别
May 02 面试题
一套带答案的C++笔试题
Jan 10 面试题
描述内存分配方式以及它们的区别
Oct 15 面试题
如何查找网页漏洞
Jun 22 面试题
Linux操作面试题
Feb 11 面试题
Linux上比较文件的命令都有哪些
Sep 28 面试题
软件测试面试题
Oct 21 面试题
广州喜创信息技术有限公司JAVA软件工程师笔试题
Oct 17 面试题
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
Dec 03 面试题
遇到的Mysql的面试题
Jun 29 面试题
如何清空Session
Feb 23 面试题
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
Oct 30 面试题
声明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 设计模式之 工厂模式
2008/12/19 PHP
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
JavaScript 构造函数 面相对象学习必备知识
2010/06/09 Javascript
jquery 选项卡效果 新手代码
2011/07/08 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
Node学习记录之cluster模块
2017/05/31 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
JS实现分页导航效果
2020/02/19 Javascript
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
python交换两个变量的值方法
2019/01/12 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
供电工程专业求职信
2014/08/09 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
介绍信如何写
2015/01/31 职场文书
redis protocol通信协议及使用详解
2022/07/15 Redis