2013-10-12 2 views
-3
#include <stdio.h> 

void foo() 
{ 
    int a = 10; 
    static int sa = 10; 

    a += 5; 
    sa += 5; 

    printf("a = %d, sa = %d\n", a, sa); 
} 


int main() 
{ 
    int i; 

    for (i = 0; i < 10; ++i) { 
    foo(); 
    } 
} 

Я понимаю, что «статическая переменная внутри функции сохраняет свое значение между вызовами». Если я хочу сбросить значение «sa = 10» позже, как я могу это достичь?как сбросить значение статической переменной внутри функции в C?

ответ

1

В настоящее время, каждый раз, когда вызывается foo(), обе переменные будут увеличиваться на 5. Однако sa сохранит значение от вызовов функций:

i | a | sa 
0 | 15 | 15 
1 | 15 | 20 
... 

сбросить значение sa просто присвоить значение этой переменной:

void foo() 
{ 
    int a = 10; 
    static int sa = 10; 

    a += 5; 
    sa += 5; 

    // reset sa 
    if (sa > 100) { 
    sa = 10; 
    } 

    printf("a = %d, sa = %d\n", a, sa); 
} 
+0

Это будет делать это, но теперь написать связный (один line) определение функции. Это довольно неприятно описать - это говорит о наличии недостатка в дизайне. Проблемы присущи использованию переменной-переменной 'static'. Это не противоречит вашему ответу, который решает этот вопрос, но он комментирует дизайн, подразумеваемый или предложенный вопросом. –

Смежные вопросы