函数 returns 空指针而不是地址

Function returns null pointer instead of address

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

为什么我的第二个函数得到空指针 return?

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

对于int* return_adress_from_input(int input)input是调用者中k的值拷贝。它们是两个不同的变量,因此具有不同的地址。

一旦到达函数的右括号,

input 在概念上超出范围。

指针 &input 然后指向您不再拥有的内存,并且读取该指针值(更不用说取消引用它)的行为是 undefined 之前C++14 和 实现定义 来自并包括 C++14。

因为您按值而不是按引用传递 input。编译器首先创建 input 的本地副本,然后创建此本地副本的 returns 地址。要获取变量地址,请使用

int* return_adress_from_input(int& input){ return &input; }

通常,您会遇到未定义的行为,在特定情况下会导致 returning nullptr

在我的电脑上我得到

00AFFC80
00AFFBA8

所以你很幸运,零分 return