C++ 输出错误
代码如下: [0](在主函数中)应等于0,而不是1。我找不到我的错误。我想问题出在and1函数的某个地方,但我似乎还是找不到它。无论如何,我很确定第一句话很好地解决了这个问题,但是网站迫使我写更多的信息C++ 输出错误,c++,C++,代码如下: [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[],
#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;
}
#包括
#包括
//V和^或
使用名称空间std;
inta[]={0,1,1};
intb[]={1,0,1};
整数*和1(整数A[],整数B[]
{
int-ret[3];
对于(int i=0;i<3;i++)
{
如果(A[i]==1&&B[i]==1)
{
ret[i]=1;
}
其他的
{
ret[i]=0;
}
}
返回ret;
}
整数*或1(常数整数A[],常数整数B[]
{
int-ret[]={0,0,0};
对于(int i=0;i<3;i++)
{
如果(A[i]==1 | | B[i]==1)
{
ret[i]=1;
}
其他的
{
ret[i]=0;
}
}
返回ret;
}
int main()
{
int*a=and1(a,B);
int*b=or1(A,b);
如果(*(a+1)=*(b+1))
{
cout当函数作用域{}
结束时,返回指向函数本地数组的指针,而这些本地数组不存在。得到的是指向不存在的对象的指针和未定义的行为函数中的和1
是和1
的局部变量。当和1
完成执行时,它超出范围。因此返回其地址没有意义。
相反,您可以将ret
数组传递给和1
(与or1类似),原型为:
void and1(const int A[], const int B[], int ret[]);
您正在从函数和1
返回一个临时数组指针,结果未定义
int* and1(int A[], int B[])
{
int ret[3];
//...
return ret;
}
int* a = and1(A, B); // <-- Undefined behavior
int*and1(inta[],intb[]
{
int-ret[3];
//...
返回ret;
}
int*a=and1(a,B);//如果你找不到你的错误,那么你会返回or1和and1中指向本地数组的指针,为什么不将结果数组作为第三个参数传递,并将结果存储在其中,然后返回void?也就是说,将原型更改为void和1(int*a,int*B,int*ret)or1也一样。这将确保您所做的更改存储在结果中。这解释了一切。谢谢。我将选择此作为答案(10分钟后,系统将允许我)再次感谢。