main.c:
long long int x=0;
int y;
int* pointer;
int func(int* p);
int main(int argc, char**argv) {
int my_array[5];
pointer=(int*)malloc(100);
y=1;
func(&pointer[0]);
func(&y);
printf("%d,%d\n",y,pointer[0]);
}
func.c:
double x;
int y=10;
int func(int* p) {
static int s=0;
s+=1;
y+=1;
*p=y+s;
x+=0.25;
printf("x=%f,s=%d\n",x,s);
}
链接文件main.c和func.c时,输出为:
x=0.25,s=1
x=0.500000,s=2
5,3
我了解输出的第一行,但是有人可以解释一下最后两行吗?
答案 0 :(得分:0)
具有外部链接的全局变量可在多个源文件之间共享。
因此,当字符串“ y = 1;”时执行时,y的共享全局值从10更改为1。
x全局变量在“ main.c”中定义为“ long long int”,占用8个字节。但是,在“ func.c”中,x声明为double,这也需要8个字节。相同的8个字节的内存,但是它们在不同的翻译单元中的解释不同。
字符串“ static int s = 0;”定义在函数调用之间保留其值的变量。
第一次执行“ func”后:
---------------------|---------------------------------------------------------------
x | 0.25 (as double) 4598175219545276416 (as long long int)
---------------------|---------------------------------------------------------------
y | 2
---------------------|---------------------------------------------------------------
s | 1
---------------------|---------------------------------------------------------------
pointer[0] | 3
---------------------|---------------------------------------------------------------
第二秒后:
---------------------|---------------------------------------------------------------
x | 0.5 (as double) 4602678819172646912 (as long long int)
---------------------|---------------------------------------------------------------
y | 5 (*p=y+s; where p=&y)
---------------------|---------------------------------------------------------------
s | 2
---------------------|---------------------------------------------------------------
pointer[0] | 3
---------------------|---------------------------------------------------------------