函数返回空指针而不是地址

时间:2018-12-13 13:33:38

标签: c++ pointers memory storage

我在玩指针以更好地理解这个概念 想问

为什么我将空指针作为第二个函数的返回值?

,以及为什么无法获得地址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

2 个答案:

答案 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

所以您很幸运,零回报