c和c++的区别 (三)const&(引用)和const*(地址)在函数中的应用
一、用普通引用接收返回值
int GetInt(){
int value=10;
return value;//返回值通过eax寄存器带回
}
int main(){
int &a=GetInt();//错误
//引用初始化的值要能取地址,寄存器没有地址
修改为:const int& a=GetInt();
return 0;
}
二、返回局部变量的地址
//不能返回局部变量的地址或引用
int* GetIntPtr(){
int value=10;
//const int value=10;是数据,在.data段,这种情况可以返回地址
return &value;
//lea eax,[value]
}
int main(){
int* p=GetIntPtr(); eax->p
return 0;
}
三、返回.data段变量的地址
int* GetIntPtr(){
static int value=10;
return &value;
//lea eax,[value]
}
int main(){
int *&p=GetIntPtr();//错误,引用初始化的值要能取地址
//修改为常引用:int* const&p=GetIntPtr();
return 0;
}
四、返回局部变量的引用
//不能返回局部变量的引用
int& GetIntRef(){
int value=10;//const int value=10;是正确的
return value;
//lea eax,[value]
}
int main(){
int a=GetIntRef(); *eax->p
}
五、返回指针的地址、返回指针的引用
int** GetIntPtrPtr(){
static int data=10;
static int* p=&data;
return &p;//通过eax寄存器带回
}
int*& GetIntPtrRef(){
static int data=10;
static int *p=&data;
return p;
}
临时量的产生由三种不同的情况:
1.函数调用之前
2.函数的return语句处
3.函数调用之后
wst_073: 可读性好差。。。
m0_74445355: 按照那个走一遍 照你说的 遍历的都在next里面
m0_74445355: 对的吧这个
CactusLLX: 你真是个天才
bit big five: 太清楚了,感谢