能不能直接给指针赋数值?

[复制链接]
查看11 | 回复6 | 2011-9-19 01:23:37 | 显示全部楼层 |阅读模式
除了赋值0以外,能不能赋值其他数值?比如这样:int*p=oxff34;谢谢!
回复

使用道具 举报

千问 | 2011-9-19 01:23:37 | 显示全部楼层
不可以。。。仔细阅读c语言的书
回复

使用道具 举报

千问 | 2011-9-19 01:23:37 | 显示全部楼层
当然可以,它就是一变量,但如果你赋值的不是一个合法的内存地址,访问到这个地址就导致读内存越界,程序崩溃。你可以给它赋值为一个有效的内存地址即可。比如intarray[10];int*p=array;或者intsize;int*p=这样就不会有问题。
回复

使用道具 举报

千问 | 2011-9-19 01:23:37 | 显示全部楼层
在单片机中很常见类似的赋值,比如一个32寄存器的地址是0xff34,你可以如此赋值volatileunsignedint*rega=0xff34;但是在有操作系统的系统上面编写应用程序时,不要这么做:这时因为操作系统对内存那块使用,那块没使用都是有记录的。他会把已经使用的内存加入到某个链表中,这样其他程序就不可以使用这个已经被使用的内存了。所以你直接使用int*p=0xff34;是会出问题的!因为:1,极大多情况下0xff34已经被其他程序使用,你这时对其操作会报错!2,0xff34没被其他程序使用,但是你直接使用它,没告诉操作系统你一经使用他了,其他程序可能在你的程序还没结束时使用它,从而对同一段内存造成访问冲突。
回复

使用道具 举报

千问 | 2011-9-19 01:23:37 | 显示全部楼层
不行,要这样做:inti=0xff34;//注意是0x,不是oxint*p=
回复

使用道具 举报

千问 | 2011-9-19 01:23:37 | 显示全部楼层
当然可以,但是比较危险,你赋的值有可能是系统进程的地址,也可能是......(注:指针也是个变量,占4个字节,只不过是存储地址的)补充:肯定性,可以在你的机器上试试啊ex:int*p=0x0012ff7c;
回复

使用道具 举报

千问 | 2011-9-19 01:23:37 | 显示全部楼层
编译可以通过的,要注意,是0xff34,不是oxff34,x前面的是数字零,不是字母o。但是你要理解你这么写的实际意义。是给指针变量赋值了一个地址,地址是0xff34;但是一般没有直接这么写的,因为你写的那个地址在内存的什么地方,有没有被系统占用。如果对这个地址进行操作了,几乎百分百崩溃。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行