这是代码: A [0](在主函数中)应该等于0,而不是1.我找不到我的错误。我想问题是在and1函数中的某个地方,但同样,我似乎无法找到它。无论如何,我很确定第一句话很好地解决了这个问题,但网站却迫使我写了更多的信息。
#include <iostream>
#include <string>
// V and ^ or
using namespace std;
int A[] = {0, 1, 1};
int B[] = {1, 0, 1};
int* and1(int A[], int B[])
{
int ret[3];
for(int i = 0; i < 3; i++)
{
if(A[i] == 1 && B[i] == 1 )
{
ret[i] = 1;
}
else
{
ret[i] = 0;
}
}
return ret;
}
int* or1(const int A[], const int B[])
{
int ret[] = {0 ,0 ,0};
for(int i = 0; i < 3; i++)
{
if(A[i] == 1 || B[i] == 1)
{
ret[i] = 1;
}
else
{
ret[i] = 0;
}
}
return ret;
}
int main()
{
int* a = and1(A, B);
int* b = or1(A, B);
if(*(a+1) == *(b+1))
{
cout << a[0] << endl;
}
return 0;
}
答案 0 :(得分:3)
您正在返回指向函数本地数组的指针,并且当函数作用域{ }
结束时,这些本地数组不存在。你得到的是指针指向不存在的东西和未定义的行为。
答案 1 :(得分:2)
int ret[3];
中的 and1
是and1
的本地变量。当and1
完成执行时,它超出范围。所以返回它的地址没有意义。
相反,您可以将ret
数组传递给and1
(类似于or1),原型为:
void and1(const int A[], const int B[], int ret[]);
答案 2 :(得分:2)
您正在从函数and1
返回一个临时数组的指针。结果未定义。
int* and1(int A[], int B[])
{
int ret[3];
//...
return ret;
}
int* a = and1(A, B); // <-- Undefined behavior
在return ret
之后,数组ret
会破坏,并不意味着使用它。