函数 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
我正在研究指针以更好地理解这个概念 想问
为什么我的第二个函数得到空指针 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