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

Lan*_*dau 3 c++ memory storage pointers

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

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

以及为什么不可能得到地址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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

0x7fff15504044

0

Bat*_*eba 7

With int* return_adress_from_input(int input),inputk调用者的值副本.它们是两个不同的变量因此具有不同的地址.

input 一旦达到函数的右括号,概念上就会超出范围.

然后指针指向&input您不再拥有的内存,并且在C++ 14之前未定义读取指针值(更不用说解除引用它)的行为,以及从C++ 14 定义的实现.

  • 它是自C++ 14以来定义的实现 (2认同)