2017-08-27 112 views
1

內部函數靜態變量在再次調用時保留其值,但爲什麼在這種情況下不會發生?靜態變量不保留其功能內的值

#include <stdio.h> 

void print(void) { 
    static int x; 
    x = 10; 
    x += 5; 
    printf("%d ", x); 
} 

int main() { 
    print(); 
    print(); 
    return 0; 
} 

它給出的輸出爲15 15

+6

重置爲'X = 10;'每次調用。 – BLUEPIXY

+1

急需C書 –

回答

8

你每次都分配一個新的值:

static int x; 
x = 10;    // <- assignment 

你可能想要的是初始化:

static int x = 10; // <- initialization 

初始化只一次可變生命中發生,static意味着變量生活的整個程序的執行時間。

0

初始化靜態變量將解決問題。下面更正例如解決了問題,並給了我1520

#include <stdio.h> 

void print(void) { 
    static int x = 10; //Initialize here 
    // x = 10; //remove this statement 
    x += 5; 
    printf("%d ", x); 
} 

int main() { 
    print(); 
    print(); 
    return 0; 
}