在下面的代码中,它与数组的大小(定义数组 arr 和 brr 时所写的)一起工作,k / n(或k / m)为以及n / k(或m / k)。我是C ++的初学者,据我所知,数组的大小必须是大于零的整数。但是这句话出了错。
由于n / k不是整数的逻辑,并且由于c ++将其转换为0,因此我尝试将数组的长度更改为0,因此用n代替k / k应该等效。但这不是。
此外,当我通过向用户询问k,n,m的值而不是在源代码本身中定义它来运行代码时,代码仅在我编写时运行 -n / k和m / k -k / n和m / k
它显示错误“ program.exe已停止工作。Windows正在检查问题的解决方案。”当我有k / m时,不管我有n / k还是k / n。
我也尝试过使用调试器(我使用的是Codeblocks),但是它并没有让我知道为什么在n / k不是整数的情况下仍在执行程序。
#include <iostream>
using namespace std;
int main()
{ int k=9;
int n=2;
int m=3;
int arr[n/k];
int brr[m/k];
for(int i=0;i<k/n;i++)
{int x= n*(i+1);
arr[i]=x;
}
for(int j=0; j<k/m; j++)
{
int y= m*(j+1);
brr[j]=y;
}
cout << "\n";
for(int i=0;i<k/n;i++)
{
cout<< arr[i] <<"\n";
}
cout << "\n";
for(int j=0; j<k/m; j++)
{
cout<< brr[j] <<"\n";
}
return 0;
}
据我所知,万一我们写n / k和m / k,代码就不起作用。 但它是。为什么?
注意-编写此代码是为了解决https://www.geeksforgeeks.org/count-common-elements-in-two-arrays-containing-multiples-of-n-and-m/ (尽管我还没有完成编写代码来完全解决问题)
编辑-正如许多评论所指出的,并给出了解释n / k为什么是整数(按整数除法)的答案的链接,我想澄清的问题不是,为什么n / k舍入为整数。整数。问题是
为什么n / k和k / n在整数除法中被赋予相同的值(它们显然不相同,但是由于程序对它们两者都适用,它们似乎是等效的。为什么这样?)
答案 0 :(得分:1)
据我所知,万一我们写n / k和m / k,代码就不起作用。但它是。为什么?
因为n/k
和m/k
使用整数除法,这会导致整数值。
关于数组的大小,standard requires that:
它应该是整数常量表达式,并且其值应大于零。
当n/k
或m/k
为零时,该行为未由标准定义。如果您的程序似乎可以正常工作,那仅是-它似乎是正确的。从理论上讲,它具有不确定的行为。