#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; }
像你这个说,下面这个也没本体啊.但是能运行. int main() { int *&r = new int; cout<<r<<endl; }
我觉得问题的关键是指针的引用对申请到的空间初始化的时候出错了 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; } 都没错,但是像我合在一起就错了.
合在一起 当然就错了 不是什么都能合在一起的 要看是什么概念 int *p = new int(4); //这里是在申请一块内存 初始为4 int * &r = p;// 这里是在做引用 cout<<r<<endl<<*r<<endl; int * &r = new int(4); 不是这样就行了 r在这里是引用那个变量的 ? 你这种表述不符合语法结构 我不知道你有什么不明白的 。
合在一起 当然就错了 不是什么都能合在一起的 要看是什么概念 int *p = new int(4); //这里是在申请一块内存 初始为4 int * &r = p;// 这里是在做引用 cout<<r<<endl<<*r<<endl; int * &r = new int(4); 不是这样就行了 r在这里是引用那个变量的 ? 你这种表述不符合语法结构 我不知道你有什么不明白的 。
那为什么int * &r = new int;这样就对了呢?这儿也没引用哪个变量啊
int *&r = new int(4); 右边是指向int的指针,左边是引用的指针,类型不统一,当然不对
------
这个肯定成立,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;
}
using std::cin;
using std::endl;int main()
{
int *p = new int(4);
int *&r = p;// 引用是一个变量的别名
cout<<r<<endl<<*r<<endl;
}
int main()
{
int *&r = new int;
cout<<r<<endl;
}
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;
}
都没错,但是像我合在一起就错了.
int *p = new int(4);
//这里是在申请一块内存 初始为4
int * &r = p;// 这里是在做引用
cout<<r<<endl<<*r<<endl;
int * &r = new int(4); 不是这样就行了 r在这里是引用那个变量的 ? 你这种表述不符合语法结构
我不知道你有什么不明白的 。
int *p = new int(4);
//这里是在申请一块内存 初始为4
int * &r = p;// 这里是在做引用 cout<<r<<endl<<*r<<endl;
int * &r = new int(4); 不是这样就行了 r在这里是引用那个变量的 ? 你这种表述不符合语法结构
我不知道你有什么不明白的 。
右边是指向int的指针,左边是引用的指针,类型不统一,当然不对
#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) }