指针变量能直接赋值吗?

int*p;p=2000;这可以不?但我看到有的程序写#defineNULL0int*p;p=NULL;类似于这样是因为0地址特殊?... int * p;
p=2000;
这可以不?
但我看到有的程序写
#define NULL 0
int * p;
p=NULL;
类似于这样
是因为0地址特殊?
展开
 我来答
百度网友a610e57
推荐于2017-11-23 · TA获得超过3368个赞
知道小有建树答主
回答量:578
采纳率:0%
帮助的人:466万
展开全部
指针变量一般是不可以直接赋值的,因为直接赋值的话,就是让这个指针指向这个赋值的地址,万一这个地址是你计算机内部的某个程序的或者是系统的某个地址,而你对这个指针的值又改变了,那么你的计算机系统就会出现问题,可能导致系统不能正常运行活着程序出错等等。但是NULL是一个空地址,即0,它不指向任何地址,所以可以赋值为NULL
cykshi
2010-07-03 · TA获得超过167个赞
知道小有建树答主
回答量:153
采纳率:40%
帮助的人:73.4万
展开全部
p=NULL;是空指针 这个指针没有任何用 但是是最安全的
因为当一个指针不用以后 如果不把他指向0 他很可能与别的地址相同

那样就遭了 而指向0却不会出现这种问题

int * p;
p=2000;这种有可能通过编译 但是这是极其危险的做法 绝对不能这样做
指针只能赋予相应的指针值 或者是0空指针
因此只能表示为
int * p;int a;
p=&a;
或者
p=0;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_whales
2012-12-27 · TA获得超过2279个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:494万
展开全部
0地址特殊?否!这只是个习惯用法。
0 作为空值是有意义的,
因为通常变量的地址不会为0;
对intel86系列CPU来说这里是中断向量表,用户代码是不会改动它的。
其他系统只怕也会一样的,因为C最早并不是用于DOS,WIndows。
而是用来编写UNIX操作系统的;并随操作系统一起发布的。
早期的UNIX并不是在IntelCPU上实现的。
事实上0地址,是可以读取的。当然如今操作系统可能会保护这段内存。
用户态代码只怕不能读取了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
龙芯929
2010-07-03
知道答主
回答量:22
采纳率:100%
帮助的人:9.8万
展开全部
不能 , NULL代表空地址,是指没有 不是0的意思;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vbtraz
2010-07-03 · TA获得超过5530个赞
知道大有可为答主
回答量:4152
采纳率:0%
帮助的人:4415万
展开全部
可以的。 在pc上你设置一个指针等于2000跟设置它等于0实际上是一样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式