请问定义变量的语句写在主函数外或主函数内有何区别


#include <iostream>
using namespace std;
int main()
{
    int n , m , ans = 0;
    char a[101][101];
    cin >> n;
    for (int i = 1 ; i <= n ; i++)
    {
        for (int j = 1 ; j <= n ; j++)
        {
            cin >> a[i][j];    
        }    
    }
    cin >> m;
    m--;
    while(m--)
    {
        for (int i = 1 ; i <= n ; i++)
        {
            for (int j = 1 ; j <= n ; j++)
            {
                if (a[i][j] == '@')
                {
                    if (a[i - 1][j] == '.')
                    {
                        a[i - 1][j] = '!';
                    }
                    if (a[i + 1][j] == '.')
                    {
                        a[i + 1][j] = '!';
                    }
                    if (a[i][j - 1] == '.')
                    {
                        a[i][j - 1] = '!';
                    }
                    if (a[i][j + 1] == '.')
                    {
                        a[i][j + 1] = '!';
                    }
                }
            }
        }
        for (int i = 1 ; i <= n ; i++)
        {
            for (int j = 1 ; j <= n ; j++)
            {
                if (a[i][j] == '!')
                {
                    a[1][j] = '@';
                }
            }
        }
    }
    for (int i = 1 ; i <= n ; i++)
    {
        for (int j = 1 ; j <= n ; j++)
        {
            if (a[i][j] == '@')
            {
                ans++;
            }
        }
    }
    cout << ans;
    return 0;
}

#include <iostream>
using namespace std;
char a[101][101];
int n , m , ans = 0;
int main()
{
    cin >> n;
    for (int i = 1 ; i <= n ; i++)
    {
        for (int j = 1 ; j <= n ; j++)
        {
            cin >> a[i][j];
        }
    }
    cin >> m;
    m--;
    while(m--)
    {
        for (int i = 1 ; i <= n ; i++)
        {
            for (int j = 1 ; j <= n ; j++)
            {
                if (a[i][j] == '@')
                {
                    if (a[i - 1][j] == '.')
                    {
                        a[i - 1][j] = '!';
                    }
                    if (a[i + 1][j] == '.')
                    {
                        a[i + 1][j] = '!';
                    }
                    if (a[i][j - 1] == '.')
                    {
                        a[i][j - 1] = '!';
                    }
                    if (a[i][j + 1] == '.')
                    {
                        a[i][j + 1] = '!';
                    }
                }
            }
        }
        for (int i = 1 ; i <= n ; i++)
        {
            for (int j = 1 ; j <= n ; j++)
            {
                if (a[i][j] == '!')
                {
                    a[i][j] = '@';
                }
            }
        }
    }
    for (int i = 1 ; i <= n ; i++)
    {
        for (int j = 1 ; j <= n ; j++)
        {
            if (a[i][j] == '@')
            {
                ans++;
            }
        }
    }
    cout << ans;
    return 0;
}

问题描述:

img


按样例输入,第一段代码结果为7,第二段代码结果为16
麻烦哪位高人指点一下,感激不尽

主函数外就是全局变量
主函数内就是函数内局部变量
第1段第51行你写错了
a[1][j] = '@';
应该是a[i][j] = '@';