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

面试题 相关文章推荐
PHP如何防止SQL注入
May 03 面试题
我能否用void** 指针作为参数, 使函数按引用接受一般指针
Feb 16 面试题
北京SQL新华信咨询
Sep 30 面试题
在SQL Server中创建数据库主要有那种方式
Sep 10 面试题
描述RIP和OSPF区别以及特点
Jan 17 面试题
编程实现去掉XML的重复结点
May 28 面试题
配置管理计划的主要内容有哪些
Jun 20 面试题
Prototype如何为一个Ajax添加一个参数
Dec 06 面试题
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
Aug 18 面试题
请用Java实现列出某个目录下的所有文件
Sep 23 面试题
Unix如何添加新的用户
Aug 20 面试题
声明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实现压缩图片尺寸并转为jpg格式的方法示例
2018/05/10 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
JS函数重载的解决方案
2014/05/13 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
浅谈$('div a') 与$('div>a')的区别
2016/07/18 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
微信小程序实现页面下拉刷新和上拉加载功能详解
2018/12/03 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
2020/07/29 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
用Python实现协同过滤的教程
2015/04/08 Python
python字符串,数值计算
2016/10/05 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
python实现俄罗斯方块
2018/06/26 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
自我鉴定范文200字
2013/10/02 职场文书
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
生产车间主管岗位职责
2013/12/28 职场文书
MongoDB支持的数据类型
2022/04/11 MongoDB
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python