• 4757阅读
  • 16回复

编制的一个简单的 程序,请大家看看,怎么样实现功能! [复制链接]

上一主题 下一主题
离线sunvim
 

只看楼主 倒序阅读 楼主  发表于: 2009-06-07
先看程序吧:
#include    <iostream>

using    namespace    std;

int    main(int argc, char *argv[])
{
    int    i    =    10;
    long    j    =    (long)&i;
    int     *ip    =    j;  //ERROR:不能进行如此操作
    cout    <<"The value is    :"<<*ip<<endl;    

    return    0;
}  

按照我的想法,我想取到 i  的值,这段程序编译 无法通过,编译器不允许,将一个数值直接赋值给 指针;
不知道同行们,谁能帮我实现我的想法呢!                          
                            
[ 此帖被sunvim在2009-06-10 16:35重新编辑 ]
离线forin
只看该作者 1楼 发表于: 2009-06-07
#include    <iostream>

using    namespace    std;

int    main(int argc, char *argv[])
{
    int    i    =    10;
    int     *ip    =   &i
    cout    <<"The value is    :"<<*ip<<endl;    

    return    0;
}  
离线sunday1118
只看该作者 2楼 发表于: 2009-06-07
楼上正解
离线sunvim

只看该作者 3楼 发表于: 2009-06-08
引用第1楼forin于2009-06-07 14:42发表的  :
#include    <iostream>
using    namespace    std;
int    main(int argc, char *argv[])
.......



你没看明白我的意思:  我现在只给你一个 对象的 “内存地址” 我就想取到这个内存地址的值;
我想过用溢出的方法能得到,但是前一个地址 很难确定!
离线sunvim

只看该作者 4楼 发表于: 2009-06-09
自己顶一下,希望哪位高手帮解决这个问题!
离线mmmou2000
只看该作者 5楼 发表于: 2009-06-10
memcpy(&ip, &j, 4);

4 == sizeof (int);
离线yleesun

只看该作者 6楼 发表于: 2009-06-10
这是个纯C++语法的问题,和QT无关!
离线foxyz

只看该作者 7楼 发表于: 2009-06-10
long    j    =    (long)&i;
把一个指针付值给long 错误
离线wader
只看该作者 8楼 发表于: 2009-06-10
不知道你要干什么,但这肯定不是一个好的设计
  1. #include <iostream>
  2. using namespace std;
  3. int main(int argc, char *argv[])
  4. {
  5.     int i = 10;
  6.     long j = (long)&i;
  7.     int* ip = (int*)j;
  8.     cout << "The value is: " << *ip << endl;
  9.     return 0;
  10. }
离线sunvim

只看该作者 9楼 发表于: 2009-06-10
引用第7楼foxyz于2009-06-10 10:43发表的  :
long    j    =    (long)&i;
把一个指针付值给long 错误


没错的!不能理解么?
离线sunvim

只看该作者 10楼 发表于: 2009-06-10
引用第8楼wader于2009-06-10 13:02发表的  :
不知道你要干什么,但这肯定不是一个好的设计
[code]
#include <iostream>
using namespace std;
.......


和设计无关,这个是测试代码!  目的很简单: 只想根据一个内存的地址的值  取得 该地址的数据!
离线sunvim

只看该作者 11楼 发表于: 2009-06-10
引用第5楼mmmou2000于2009-06-10 01:39发表的  :
memcpy(&ip, &j, 4);
4 == sizeof (int);


似乎不行吧,不能解决问题!

j 的值 是 要取得数据的 那个内存地址;

假设: j 的值 为:4040 ;  &j的值 为:298654

memcpy(&ip, &j, 4);

这么操作后,*ip的值 还是:4040; 而内存地址为4040所存放的数据 还是 没有取到!
离线sbtree
只看该作者 12楼 发表于: 2009-06-10
int     *ip    =    (int *)j;

不是已经有人这么给出了吗?
windows 7 + VC++2008 + Qt4.5.2
离线sunvim

只看该作者 13楼 发表于: 2009-06-10
引用第12楼sbtree于2009-06-10 17:13发表的  :
int     *ip    =    (int *)j;
不是已经有人这么给出了吗?


早想过这个方法了,行不通哦!
编译器都无法通过的
离线sbtree
只看该作者 14楼 发表于: 2009-06-10
我用visual studio 2005编译无错误
windows 7 + VC++2008 + Qt4.5.2
离线sunvim

只看该作者 15楼 发表于: 2009-06-10
引用第14楼sbtree于2009-06-10 17:24发表的  :
我用visual studio 2005编译无错误


谢谢,我没注意前面有同志已经给出!
原因找到了! 你给出的代码 是正解!

我的代码出了问题:
#include    <iostream>

using    namespace    std;

int    main(int argc, char *argv[])
{
    int    i    =    10;
    long    j    =    (long)&i;
    cout    <<"The value is    :"<<(int *)j<<endl;  //这里出错了,输出的j的上级内存地址了,呵呵……,脸红
    
    return    0;
}


——————————————————————本帖已经结贴————————————————————
离线wader
只看该作者 16楼 发表于: 2009-06-10
7楼也有一定道理:C++标准并没有保证指针类型和long占有同样大小的内存空间

慎用!
快速回复
限100 字节
 
上一个 下一个