一个 C++ 程序由两个 .cpp 文件组成,main.cpp 和 f.cpp。main.cpp文件的代码如下:
//main.cpp
#include <iostream>
using namespace std;
void f(char* s,int n);
const int N=10;
static char s[N];
static char a[N];
int main ()
{
int i;
for (i=0; i<N; i++)
a[i]='0'+i;
for (i=0; i<N; i++)
cout<<a[i];
cout<<'\n';
f(s,N);
for (i=0; i<N; i++)
cout<<a[i];
cout<<'\n';
}
该函数f
在文件 f.cpp 中定义。该程序编译没有错误和警告。执行时,程序会定期结束,并保留以下内容cout
:
0123456789
!123456789
您对该程序的有效性和行为有何评论?详细解释。
我想 f 函数正在以某种方式非法访问 a 的内存,可能是因为 s 就在内存中的 a 之前,所以会发生带有索引的事情……但是,我真的不确定,因为我想static
也会以某种方式改变事情……