分配给C中静态变量的内存

时间:2020-09-21 17:31:55

标签: c static

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

局部变量通常存储在函数的堆栈中,全局变量和静态变量存储在过程的数据段中,对吗?在这种情况下,在多个函数中使用相同的静态变量名称会引起任何冲突吗?在数据段中如何引用变量?

1 个答案:

答案 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

相关问题