本帖最后由 kobemadi 于 2012-03-07 12:31:16 编辑

解决方案 »

  1.   

    那为什么int *p = new int(4)就能成立呢?
    ------
    这个肯定成立,new了int类型的指针,初始化值为4,即指针指向的值为4.
    指针的引用可以这样使用:
    void GetMemory(char* &ptr) // 注意这里
    {
    ptr = new char[20];
    }int main()
    {
    char * p =NULL;
    GetMemory (p);
    strcpy(p, "hello");
    printf("%s\n", p); return 0;
    }
      

  2.   

    #include<iostream>using std::cout;
    using std::cin;
    using std::endl;int main()
    {
    int *p = new int(4);
            int *&r = p;// 引用是一个变量的别名
    cout<<r<<endl<<*r<<endl;
    }
      

  3.   

    像你这个说,下面这个也没本体啊.但是能运行.
    int main()
    {
        int *&r = new int;
        cout<<r<<endl;
    }
      

  4.   

    我觉得问题的关键是指针的引用对申请到的空间初始化的时候出错了
    int main()
    {
      int *&r = new int;
      *r = 4;
      cout<<r<<endl<<*r<<endl;
    }

    int main()
    {
      int *p = new int(4);
      int * &r = p;
      cout<<r<<endl<<*r<<endl;
    }
    都没错,但是像我合在一起就错了.
      

  5.   

    合在一起  当然就错了    不是什么都能合在一起的   要看是什么概念   
    int *p = new int(4);
    //这里是在申请一块内存   初始为4  
      int * &r = p;//  这里是在做引用  
      cout<<r<<endl<<*r<<endl;

     int * &r = new int(4);  不是这样就行了  r在这里是引用那个变量的 ? 你这种表述不符合语法结构
    我不知道你有什么不明白的 。
      

  6.   

    合在一起 当然就错了 不是什么都能合在一起的 要看是什么概念   
    int *p = new int(4);
    //这里是在申请一块内存 初始为4 
    int * &r = p;// 这里是在做引用 
    cout<<r<<endl<<*r<<endl;
     int * &r = new int(4); 不是这样就行了 r在这里是引用那个变量的 ? 你这种表述不符合语法结构
    我不知道你有什么不明白的 。
      

  7.   

    那为什么int * &r = new int;这样就对了呢?这儿也没引用哪个变量啊
      

  8.   

    int *&r = new int(4);
    右边是指向int的指针,左边是引用的指针,类型不统一,当然不对
      

  9.   

    反汇编代码贴在这里,注释一下,大家慢慢琢磨:#include "stdafx.h"
     #include<iostream> 
    using namespace std;int _tmain(int argc, _TCHAR* argv[])
    {
    012C13D0  push        ebp  
    012C13D1  mov         ebp,esp 
    012C13D3  sub         esp,100h //这是为局部变量在stack预留空间
    012C13D9  push        ebx  
    012C13DA  push        esi  
    012C13DB  push        edi  
    012C13DC  lea         edi,[ebp-100h] 
    012C13E2  mov         ecx,40h 
    012C13E7  mov         eax,0CCCCCCCCh //这是把局部变量空间初始化为int3。
    012C13EC  rep stos    dword ptr es:[edi] 
    int *&r = new int;
    012C13EE  push        4    
    012C13F0  call        operator new (12C1195h) 
    012C13F5  add         esp,4 
    012C13F8  mov         dword ptr [ebp-0F8h],eax //eax是函数返回值
    012C13FE  lea         eax,[ebp-0F8h] 
    012C1404  mov         dword ptr [r],eax 
    *r = 4;  
    012C1407  mov         eax,dword ptr [r] 
    012C140A  mov         ecx,dword ptr [eax] 
    012C140C  mov         dword ptr [ecx],4  int *p = new int(4);
    012C1412  push        4    
    012C1414  call        operator new (12C1195h) 
    012C1419  add         esp,4 
    012C141C  mov         dword ptr [ebp-0ECh],eax 
    012C1422  cmp         dword ptr [ebp-0ECh],0 
    012C1429  je          wmain+75h (12C1445h) 
    012C142B  mov         eax,dword ptr [ebp-0ECh] 
    012C1431  mov         dword ptr [eax],4 
    012C1437  mov         ecx,dword ptr [ebp-0ECh] 
    012C143D  mov         dword ptr [ebp-100h],ecx 
    012C1443  jmp         wmain+7Fh (12C144Fh) 
    012C1445  mov         dword ptr [ebp-100h],0 
    012C144F  mov         edx,dword ptr [ebp-100h] 
    012C1455  mov         dword ptr [p],edx 
    int * &r2 = p;
    012C1458  lea         eax,[p] 
    012C145B  mov         dword ptr [r2],eax  cout<<r<<endl<<*r<<endl;
    012C145E  mov         esi,esp 
    012C1460  mov         eax,dword ptr [__imp_std::endl (12C82A0h)] 
    012C1465  push        eax  
    012C1466  mov         ecx,dword ptr [r] 
    012C1469  mov         edx,dword ptr [ecx] 
    012C146B  mov         edi,esp 
    012C146D  mov         eax,dword ptr [edx] 
    012C146F  push        eax  
    012C1470  mov         ebx,esp 
    012C1472  mov         ecx,dword ptr [__imp_std::endl (12C82A0h)] 
    012C1478  push        ecx  
    012C1479  mov         eax,esp 
    012C147B  mov         edx,dword ptr [r] 
    012C147E  mov         ecx,dword ptr [edx] 
    012C1480  push        ecx  
    012C1481  mov         ecx,dword ptr [__imp_std::cout (12C82A4h)] 
    012C1487  mov         dword ptr [ebp-100h],eax 
    012C148D  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (12C82A8h)] 
    012C1493  mov         ecx,dword ptr [ebp-100h] 
    012C1499  cmp         ecx,esp 
    012C149B  call        @ILT+340(__RTC_CheckEsp) (12C1159h) 
    012C14A0  mov         ecx,eax 
    012C14A2  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (12C82B0h)] 
    012C14A8  cmp         ebx,esp 
    012C14AA  call        @ILT+340(__RTC_CheckEsp) (12C1159h) 
    012C14AF  mov         ecx,eax 
    012C14B1  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (12C82ACh)] 
    012C14B7  cmp         edi,esp 
    012C14B9  call        @ILT+340(__RTC_CheckEsp) (12C1159h) 
    012C14BE  mov         ecx,eax 
    012C14C0  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (12C82B0h)] 
    012C14C6  cmp         esi,esp 
    012C14C8  call        @ILT+340(__RTC_CheckEsp) (12C1159h) 
    cout<<r2<<endl<<*r2<<endl;
    012C14CD  mov         esi,esp 
    012C14CF  mov         eax,dword ptr [__imp_std::endl (12C82A0h)] 
    012C14D4  push        eax  
    012C14D5  mov         ecx,dword ptr [r2] 
    012C14D8  mov         edx,dword ptr [ecx] 
    012C14DA  mov         edi,esp 
    012C14DC  mov         eax,dword ptr [edx] 
    012C14DE  push        eax  
    012C14DF  mov         ebx,esp 
    012C14E1  mov         ecx,dword ptr [__imp_std::endl (12C82A0h)] 
    012C14E7  push        ecx  
    012C14E8  mov         eax,esp 
    012C14EA  mov         edx,dword ptr [r2] 
    012C14ED  mov         ecx,dword ptr [edx] 
    012C14EF  push        ecx  
    012C14F0  mov         ecx,dword ptr [__imp_std::cout (12C82A4h)] 
    012C14F6  mov         dword ptr [ebp-100h],eax 
    012C14FC  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (12C82A8h)] 
    012C1502  mov         ecx,dword ptr [ebp-100h] 
    012C1508  cmp         ecx,esp 
    012C150A  call        @ILT+340(__RTC_CheckEsp) (12C1159h) 
    012C150F  mov         ecx,eax 
    012C1511  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (12C82B0h)] 
    012C1517  cmp         ebx,esp 
    012C1519  call        @ILT+340(__RTC_CheckEsp) (12C1159h) 
    012C151E  mov         ecx,eax 
    012C1520  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (12C82ACh)] 
    012C1526  cmp         edi,esp 
    012C1528  call        @ILT+340(__RTC_CheckEsp) (12C1159h) 
    012C152D  mov         ecx,eax 
    012C152F  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (12C82B0h)] 
    012C1535  cmp         esi,esp 
    012C1537  call        @ILT+340(__RTC_CheckEsp) (12C1159h) }
      

  10.   

    像你这么说,int *&r = new int;类型也不统一啊,但是它对