数组的大小可以是2/9还是3/9?

时间:2019-07-03 19:09:43

标签: c++

在下面的代码中,它与数组的大小(定义数组 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舍入为整数。整数。问题是

  1. 为什么n / k和k / n在整数除法中被赋予相同的值(它们显然不相同,但是由于程序对它们两者都适用,它们似乎是等效的。为什么这样?)

    1. 是,n / k是整数除法。因此答案应该为0(因为2/9将被截断为0)。但是,当我们将n / k替换为0时,代码将不起作用。

1 个答案:

答案 0 :(得分:1)

  

据我所知,万一我们写n / k和m / k,代码就不起作用。但它是。为什么?

因为n/km/k使用整数除法,这会导致整数值。

关于数组的大小,standard requires that

  

它应该是整数常量表达式,并且其值应大于零。

n/km/k为零时,该行为未由标准定义。如果您的程序似乎可以正常工作,那仅是-它似乎是正确的。从理论上讲,它具有不确定的行为。