| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 460 人关注过本帖
标题:关于指针
只看楼主 加入收藏
maoyan32
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-10-14
收藏
 问题点数:0 回复次数:4 
关于指针
#include<iostream>
int main(){
      using namespace std;
    int i;
      cin>>i;
      int *s=(int*)i;
      cout<<*s;
       return 0;
}
为什么执行中会出现错误?
2014-10-15 15:06
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
如果你尝试用指针引用一个不能访问的地址 会出错

如果你想访问的地址是可以读的 那么 不会有问题 虽然这种方法不提倡 为啥呢 因为你不知道到底哪些地方是可读的 哪些地方是不可读的 所以 很可能会崩溃 而且是不可控的
2014-10-15 15:22
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
收藏
得分:0 
其实你只要把(int *) i 改成  &i即可
即 :     int *s=&i;

你要知道(int *)是强制转换地址类型的操作符
看代码理解
程序代码:
int i = 5;
cout << (int*) i ; //输出结果将会是把i的值转换成内存地址--->>> 0x5
cout << &i ;       //输出的结果才是i的值所在的内存地址----->>> 0x28fedc     (随便写的,每个人的都不一样)

如果说,我输入i = 28fedc
那么 int*s (int *)i ; cout << *s; 将会成功通过.
因为 0x28fedc 是一个可访问的内存.

hl928452957@gmail点com

2014-10-16 08:27
qwe885167759
Rank: 4
等 级:业余侠客
威 望:5
帖 子:148
专家分:259
注 册:2013-3-12
收藏
得分:0 
应该是你吧i强转成指针的时候 在给s赋值时( int *s=(int*)i;)造成了内存访问出现了不可预知的错误,所以运行时候出现了错误,你调试运行一下,看看错误

[ 本帖最后由 qwe885167759 于 2014-10-25 22:46 编辑 ]

我本楚狂人,凤歌笑孔丘
2014-10-25 22:43
快速回复:关于指针
数据加载中...
 
   



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

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