在c ++函数中返回地址和返回指针之间的区别[重复]

Posted

技术标签:

【中文标题】在c ++函数中返回地址和返回指针之间的区别[重复]【英文标题】:Difference between returning address and returning a pointer in c++ function [duplicate] 【发布时间】:2020-04-16 15:49:41 【问题描述】:

当传递 a=4 时,给定函数返回:

int* temp1(int a)

   int b = a*2;
   return &b;


int* temp2(int a)

   int b = a*2;
   int *p = &b;
   return p;


int main()

   cout << *temp1(4);  // error
   cout << *temp2(4);  // output = 8

为什么以上两个函数有不同的行为? 然而,下面有相同的输出?

int a = 3;
cout << *(&a); // 3

int a= 3;
int *p = &a;
cout << *p; // 3

【问题讨论】:

两个函数都是未定义的行为:https://***.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope 没有区别,但请注意,您返回的是局部变量的地址(分配在函数的堆栈帧上),该地址在函数调用完成时会自动释放,因此调用者指向无效内存. 【参考方案1】:

两个函数的行为是相同的。两者都返回一个指向局部变量的指针。当函数返回时,指向对象的生命周期都结束。因此,如果您的程序取消引用返回的指针中的任何一个,则程序的行为是未定义的。

【讨论】:

最后一部分说的很好。如果您实际尝试使用返回的指针,则只有 UB。尽管那时您会质疑如果不允许使用该指针,函数返回指针的意义何在。

以上是关于在c ++函数中返回地址和返回指针之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

signal函数 问题,,,怎么让函数地址还传参

python中= 和==的区别

C/C++中的指针

C-const和static的区别, 指针作为函数的返回值, 指向函数的指针, 枚举

在c语言中子函数引用主函数中的值和引用主函数某个值的地址的区别

c语言中的if和指针