相关疑难解决方法(0)

201
推荐指数
6
解决办法
6万
查看次数

在函数中返回数组

我有一个int arr[5]传递给函数的数组fillarr(int arr[]):

int fillarr(int arr[])
{
    for(...);
    return arr;
}
Run Code Online (Sandbox Code Playgroud)
  1. 我该如何返回该数组?
  2. 我将如何使用它,说我返回一个指针我将如何访问它?

c++ arrays pointers return function

190
推荐指数
8
解决办法
73万
查看次数

C++返回对局部变量的引用

如果必须返回i,以下代码(func1())是否正确?我记得在某处读到返回对局部变量的引用时存在问题.它与func2()有什么不同?

int& func1()
{
    int i;
    i = 1;
    return i;
}

int* func2()
{
    int* p;
    p = new int;
    *p = 1;
    return p;
}
Run Code Online (Sandbox Code Playgroud)

c++

102
推荐指数
2
解决办法
10万
查看次数

智能指针和数组

智能指针如何处理数组?例如,

void function(void)
{
    std::unique_ptr<int> my_array(new int[5]);
}
Run Code Online (Sandbox Code Playgroud)

my_array超出范围并被破坏时,整个整数数组是否会被重新声明?只回收了数组中的第一个元素吗?或者还有其他事情发生(例如未定义的行为)?

c++ smart-pointers c++11

44
推荐指数
2
解决办法
3万
查看次数

由于我无法返回局部变量,从C或C++函数返回字符串的最佳方法是什么?

作为这个问题的后续行动:

从我所看到的,这应该按预期工作:

void greet(){
  char c[] = "Hello";
  greetWith(c);
  return;
}
Run Code Online (Sandbox Code Playgroud)

但这会导致未定义的行为:

char *greet(){ 
  char c[] = "Hello";
  return c;
}
Run Code Online (Sandbox Code Playgroud)

如果我是对的,那么修复第二个问候语功能的最佳方法是什么?在嵌入式环境中?在桌面上?

c c++ memory

18
推荐指数
6
解决办法
2万
查看次数

返回对局部变量的引用

可能重复:
返回本地或临时变量的地址
是否可以在其范围之外访问本地变量的内存?

即使知道由于以下剪辑而发生的事情,理解它是如何发生也会有所帮助.接下来是四个问题

鉴于:

int& foo()
{
    int i = 1;
    return i;
}
Run Code Online (Sandbox Code Playgroud)

并且知道在下面对名为i本地的引用被解除引用到分配给intVal的temp并且本地ifoo()的末尾消失

int  intVal = foo();
Run Code Online (Sandbox Code Playgroud)

第一个问题 - 在下面,表达式的右侧与上面相同,所以这是编译器看到左侧并且基于上下文知道不取消引用返回的引用的情况,而是用它初始化创建一个新的引用?

第二个问题 - 只有这一点使得本地i坚持在intRef在范围内?

int& intRef = foo();
Run Code Online (Sandbox Code Playgroud)

第三个问题 - bellow intPtr获取本地i的地址.那么,编译器是否使用赋值的上下文并决定不取消引用以在获取引用的地址之前获取值(而不是说获取包含去引用值的temp的地址)?

第四个问题 - 当intPtr在范围内时,本地i不停

int* intPtr = &foo();   
Run Code Online (Sandbox Code Playgroud)

c++ reference

7
推荐指数
1
解决办法
2707
查看次数