我在玩指针以更好地理解这个概念 想问
为什么我将空指针作为第二个函数的返回值?
,以及为什么无法获得地址0x7fff15504044。 发生了什么事,内部存储器中存储的是整数5, 我在函数内部使用它时是什么?。
#include <iostream>
using namespace std;
int* return_adress(int* input){ return input; }
int* return_adress_from_input(int input){ return &input; }
int main(){
int k = 3;
cout << return_adress(&k) << endl;
cout << return_adress_from_input(k) << endl;
}
输出:
0x7fff15504044
0
答案 0 :(得分:7)
对于int* return_adress_from_input(int input)
,input
是呼叫者中k
的值副本。它们是两个不同的变量,因此具有不同的地址。
input
从概念上讲超出了函数的右括号。
然后,指针&input
指向您不再拥有的内存,并且在C ++ 14之前,读取该指针值的行为(更不用说对其进行引用了)是 undefined ,和定义的实现(包括C ++ 14)。
答案 1 :(得分:1)
因为您是按值而不是引用传递input
。 Compiller首先创建input
的本地副本,然后返回此本地副本的地址。要获取变量地址,请使用
int* return_adress_from_input(int& input){ return &input; }
通常,您会得到不确定的行为,在特定情况下可能导致返回nullptr
在我的PC上,我得到
00AFFC80
00AFFBA8
所以您很幸运,零回报