函数输出问题
Function Output Problems
我创建了一个函数来将一个整数数组(一个邮政编码)转换为一个 cstring。如果我调用该函数,return 是乱码,但如果我在函数中计算出 returned 变量,它就完全符合预期。
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 = '[=10=]';
std::cout << output << std::endl; // (debug only) as expected
return output; // cout << print_zip(); not as expected
}
当你 cout
函数内部的 return 变量时,应该期望 return 想要的值。这是因为当您在函数内部创建局部变量时,它驻留在该函数的堆栈帧中。因此,当 STILL 在函数内部时,范围仍设置为查看该变量。
相反,当指向局部变量的指针被 returned 时,堆栈帧不再存在,基本上意味着指向的对象可能是也可能不是完全垃圾。
为了 return 一个在栈帧内外保持不变的变量,您需要通过引用传递它,这通常是通过复制您试图 return,然后 return 复制该副本。
我创建了一个函数来将一个整数数组(一个邮政编码)转换为一个 cstring。如果我调用该函数,return 是乱码,但如果我在函数中计算出 returned 变量,它就完全符合预期。
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 = '[=10=]';
std::cout << output << std::endl; // (debug only) as expected
return output; // cout << print_zip(); not as expected
}
当你 cout
函数内部的 return 变量时,应该期望 return 想要的值。这是因为当您在函数内部创建局部变量时,它驻留在该函数的堆栈帧中。因此,当 STILL 在函数内部时,范围仍设置为查看该变量。
相反,当指向局部变量的指针被 returned 时,堆栈帧不再存在,基本上意味着指向的对象可能是也可能不是完全垃圾。
为了 return 一个在栈帧内外保持不变的变量,您需要通过引用传递它,这通常是通过复制您试图 return,然后 return 复制该副本。