编译器如何给出这个答案?

时间:2017-08-17 13:43:57

标签: c++

我制作了一个程序并犯了一个小错误,就是在这个程序中声明一个结构数组,如node o[no];而不是node *o=new node[no];当我从执行这个错误的代码时得到的结果几乎没有什么不同。我编译并输入零,当最后两行被评论时,它给出了输出零。

shizuka@naruto:~$ g++ -std=c++11 hours.cpp
shizuka@naruto:~$ ./a.out
2
0shizuka@naruto:~$

当我取消注释这些行时,输出更改为:

shizuka@naruto:~$g++ -std=c++11 hours.cpp
shizuka@naruto:~$ ./a.out
2
2ABCABCshizuka@naruto:~$

然后我将cout>> count>>"\n";放在外部循环中(在最后两行注释代码中)以查看发生了什么pastebin。 然后我取消注释最后两行并再次运行pastebin。输出是不同的。通过评论和取消注释最后两行代码,没有得到计数变量的影响。

基本上我想知道这种声明结构数组的错误方式如何影响存储在变量count中的值。

node *o=new node[no];代替node o[no];

,一切正常

该程序用于查找半径为r的圆内的整数坐标数,中心为0。

 #include <iostream>
    using namespace std;
    struct node{
        int x;int y;
    };
    int main()
    {
        int r;
        cin >> r;
        int no=2*r+1;
        //node *o=new node[no];
        node o[no];
        int count=0;
        cout << r<< endl;
        for(int i=-r;i<=r;i=i+1)
        {
            for(int j=-r;j<=r;j=j+1)
            {
                int k=i*i+j*j;
                if( k <= (r*r) )
                {
                    o[count].x=i;
                    o[count++].y=j;     
                }
            }
        }
        cout << count;
        //for(int i=0;i<count;i++)
        //  cout<<"ABC";
        return 0;   

    }

0 个答案:

没有答案