【发布时间】:2021-07-12 03:13:50
【问题描述】:
我对 C++ 还很陌生,所以这个问题可能看起来很基础(愚蠢!)。我正在尝试返回一个 (int i, int j) 数组,它是一个位置(坐标)。
这是我的代码:
int* Unblocker(int d1[2],int d2[2])
{
int unblocker_position[2];
int distance;
distance = abs(d1[0]-d2[0])+ abs(d1[1]-d2[1]);
switch (distance)
{
case 1:
break;
case 2:
switch (abs(d1[0] - d2[0]))
{
case 2:
unblocker_position[0] = 1;
unblocker_position[1] = 0;
return unblocker_position;
break;
default:
return NULL;
break;
}
break;
default:
return NULL;
break;
}
}
int main(){
int p1[2]={0,0};
int p2[2]={2,0};
int * a = Unblocker(p1,p2);
cout << a[0] << " " << a[1] << endl;
return 0;}
输出是:
1 1
但是,我期望“1 0”。我不确定是使用开关还是使用数组作为返回类型时出错了。我删除了 switch 中的其他案例,以便更容易进入重点。
【问题讨论】:
-
返回一个指向局部变量的指针是未定义的行为。此外,如果
distance为1,则不会执行return语句,这也是未定义行为。 -
完美!所以我只需要将 unblocker_position 定义为全局。谢谢@RemyLebeau!
-
如果你使用
std::array,你会避免它(局部变量返回部分)。 -
或
std::pair。或者一个简单的用户定义的 2 元素结构。
标签: c++ arrays switch-statement