注册 登录
编程论坛 C++教室

关于指针

maoyan32 发布于 2014-10-15 15:06, 470 次点击
#include<iostream>
int main(){
      using namespace std;
    int i;
      cin>>i;
      int *s=(int*)i;
      cout<<*s;
       return 0;
}
为什么执行中会出现错误?
4 回复
#2
zklhp2014-10-15 15:22
如果你尝试用指针引用一个不能访问的地址 会出错

如果你想访问的地址是可以读的 那么 不会有问题 虽然这种方法不提倡 为啥呢 因为你不知道到底哪些地方是可读的 哪些地方是不可读的 所以 很可能会崩溃 而且是不可控的
#3
stop12042014-10-16 08:27
其实你只要把(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 是一个可访问的内存.
#4
qwe8851677592014-10-25 22:43
应该是你吧i强转成指针的时候 在给s赋值时( int *s=(int*)i;)造成了内存访问出现了不可预知的错误,所以运行时候出现了错误,你调试运行一下,看看错误

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