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

一个有趣的C++程序欢迎高手来探讨下!

超神级 发布于 2013-09-11 21:58, 780 次点击
只有本站会员才能查看附件,请 登录
程序代码:
#include <iostream>
using namespace std;
int  main()
{
    int *p1=new int;
    *p1=12;
    int *p2=new int;
     *p2=12;
    cout<<"(赋予p1指针的值)"<<*p1<<endl;
        cout<<"(12也有地址?)"<<p1<<"(地址是否一样)"<<&p1<<endl;
        cout<<"(测试2赋予p2指针的值)"<<*p2<<endl;
            cout<<"(测试2也有地址?)"<<p2<<"(测试2地址是否一样)"<<&p2<<endl;
    delete p1;
    delete p2;
    system("pause");
    return 0;
}

探讨问题一:
12为什么会有地址!?
探讨问题二;
程序的执行的步骤是什么怎么实现程序的!?
7 回复
#2
yss282013-09-11 23:05
程序代码:
/*--------------------------------------------------------
    你这段程序编译、连接成 .exe程序后,运行它,操作系统会把它加载到内存,并在内存中给它分配
相应的 代码空间、数据空间、堆栈空间(汇编常这样称呼)。
数据空间就包括了此程序中的 12、122、字符串常量(也就是此程序中 “” 包括的汉字 标点符号等);
堆栈空间就包括了此程序中的局部变量。比如你定义的指针*p1,*p2;
代码空间就是操纵此程序的一些汇编指令。
就这样吧,能理解不?这些细东西就得学汇编才好理解

补充点:上面是操作系统分配的内存空间。而你在程序中使用new指向的内存地址是此程序请求的,所以你需要delete释放它
---------------------------------------------------------
*/
#include <iostream>
using namespace std;
int  main()
{
    int *p1=new int;
    cout << p1 << ", " << &p1 << endl;
    // p1指针指向的动态内存地址; &p1表示此程序堆栈空间地址
    *p1=12;        // 把数据区的12复制到p1指向的动态内存
    int *p2=new int;
    cout << p2 << ", " << &p2 << endl;
    // p2指针指向的动态内存地址; &p2表示此程序堆栈空间地址(注意&p1-&p2=0000000C)
    *p2=122;
    cout<<"(赋予p1指针的值)" << *p1 << endl;
    cout<<"(12和122都有地址,在此程序的数据区)"<<p1<<"(地址不一样)"<<&p1<<endl;
    cout<<"(测试2赋予p2指针的值)"<<*p2 <<endl;
    cout<<"(测试2也有地址)"<< p2 <<"(测试2地址不一样)"<<&p2<<endl;
    delete p1;
    delete p2;
//    system("pause");
    return 0;
}


[ 本帖最后由 yss28 于 2013-9-11 23:10 编辑 ]
#3
peach54602013-09-12 09:18
12没有地址的话,你回答我一个问题
变量在计算机里面存在哪里???

程序执行步骤,你不会自己调试看看啊...
#4
toofunny2013-09-28 11:26
这么有趣啊。。。第二个问题恐怕你要学完计算机原理才能弄明白
#5
embed_xuel2013-09-28 11:32
指针基本概念都没掌握,还说有趣
#6
TonyDeng2013-09-28 12:10
以下是引用embed_xuel在2013-9-28 11:32:39的发言:

指针基本概念都没掌握,还说有趣

渾人何其多,說也說不過來,隨他去吧。
#7
mskeheng2013-09-28 20:00
指针变量是变量,它在内存中也有地址的。。。。。。。。。。。。。。。。。。
多看看指针相关的内容吧。。。。
#8
lefeng_宇2013-10-02 15:39
#include"iostream"
using namespace std;
int main()
{
    int *p1=new int;
    cout<<&p1<<endl;
    *p1=12;
    int *p2=new int;
    cout<<&p2<<endl;
    *p2=12;
    cout<<"(赋予p1指针的值)"<<*p1<<endl;
    cout<<"(测试12也有地址?)   "<<p1<<"   "<<"(地址是否一样)  "<<&p1<<endl;
    cout<<"(测试2赋予p2指针的值)   "<<*p2<<"   "<<endl;
    cout<<"(测试2也有地址?)  "<<p2<<"   "<<"(测试2地址是否一样)  "<<&p2<<endl;
    delete p1;
    delete p2;
    system("pause");
    return 0;
}
这样就更容易了解了!!
1