| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 432 人关注过本帖
标题:指针问题
只看楼主 加入收藏
jiangshuangz
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-10-18
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:4 
指针问题
#include <stdio.h>
main()
{
    int a=0;
    int *p=0;
    a=*p;//没报错!可是运行的时候错了!为什么!理论上没错吧!
}
搜索更多相关主题的帖子: 指针 
2010-10-18 23:29
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:5 
这两个0是不一样的
一个为const 常量
一个为指针指向的NULL,而NULL是为不可读的
除非你修改NULL所在区域的内存属性 改为可读
2010-10-19 08:54
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
收藏
得分:5 
hahayezhe  正解  看书很重要 反复强调
2010-10-19 09:57
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:5 
让编译器生成汇编代码看看:   
    push    si        ;由于a,p都长两字节,都不分配空间,用寄存器保存,si用来保存a  --int a;
    push    di        ;int* p;
    xor    si,si        ;为a赋值,a=0;
    xor    di,di        ;为p赋值,p=0;
    mov    si,word ptr [di]    ;将p指向的字单元内容传给a 数据段ds:[0] ---a=*p;
看起来没什么错啊
环境:tc
2010-10-19 17:19
fhqbgmqj
Rank: 2
等 级:论坛游民
帖 子:26
专家分:57
注 册:2010-5-7
收藏
得分:5 
int *p = 0;
a = *p;
这两句是把地址为0的内存单元中存的值赋给a,0内存单元是操作系统内核使用内存区,是不可访问的,你这样写编译不会出问题,可是在运行的时候会出现非法访问的问题,也就是段错误,好好看看指针。
2010-10-19 19:32
快速回复:指针问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020054 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved