int a, b, c = 0;
void prtFun(void);
int main()
{
static int a = 1; /* line 1 */
prtFun();
a += 1;
prtFun();
printf("\n %d %d ", a, b);
}
void prtFun(void)
{
static int a = 2; /* line 2 */
int b = 1;
a += ++b;
printf(" \n %d %d ", a, b);
}
上述程序的输出为:
4,2
6,2
2,0
局部变量通常存储在函数的堆栈中,全局变量和静态变量存储在过程的数据段中,对吗?在这种情况下,在多个函数中使用相同的静态变量名称会引起任何冲突吗?在数据段中如何引用变量?
答案 0 :(得分:0)
首先,当您问问题正确设置代码格式
int a, b, c = 0;
void prtFun (void);
int main(void)
{
static int a = 1; /* line 1 */
prtFun();
a += 1;
prtFun();
printf ( "\n %d %d " , a, b) ;
}
void prtFun (void)
{
static int a = 2; /* line 2 */
int b = 1;
a += ++b;
printf (" \n %d %d " , a, b);
}
prtFun
b
是一个自动变量,每次调用此函数时都会对其进行初始化。
a
是静态局部变量,仅初始化一次,并且在函数调用之间保留其值。但是它的范围是函数prtFun
因此,当您第一次调用它时,a
被分配为4,而b
被分配为2。您将打印此值
在函数main
中,另一个a
静态局部变量的值分配为2(初始化+增量)。
再次调用prtFun
时,将2添加到函数自己的a
变量中,该变量保留上一次调用的值(4),结果为6。b
为再次初始化为1并预先递增-原来为2。
然后在main函数中打印自己的a
变量(为2)和全局变量b
为0