我做了一个函数,将一个整数数组(一个邮政编码)转换为一个cstring。如果我调用该函数,则返回结果是乱码,但是如果我在该函数中引用了返回的变量,则该变量将完全符合预期。
const char* print_zip(const int* zip) {
char output[6];
char* ctemp = output;
const int *itemp = zip;
for (int i = 0; i < 5; i++) {
*ctemp = *itemp + 48; // convert to char numbers.
itemp++; // iterate using pointers rather than []
ctemp++; // per assignment specifications
}
*ctemp = '\0';
std::cout << output << std::endl; // (debug only) as expected
return output; // cout << print_zip(); not as expected
}
答案 0 :(得分:0)
当您cout
返回函数内部的返回变量时,应该期望它返回所需的值。这是因为当您在函数内部创建局部变量时,它位于该函数的堆栈框架中。因此,当在函数内STILL时,作用域仍设置为查看该变量。
相反,当返回指向局部变量的指针时,堆栈框架不再存在,这基本上意味着指向对象的对象可能是也不可能是完全垃圾。
为了返回在堆栈框架之内或之外的常量,您将需要通过引用传递该变量,这通常是通过尝试复制对象的副本,然后返回该副本来完成的。