2015-09-26 201 views
1

下面的指針是我的代碼: 當我運行它,我得到了下面的語句:如何聲明一個常變量

X is equal to 1 and k is equal to 1 
X is equal to 0 and k is equal to 0 

我想達到的目的是有兩個語句聲明相同東西(等於1)。我知道我可以將整數x和k分別設置爲1在if語句下,但是我想知道如何在函數執行後存儲一個值,以便在執行第二個操作後x和k保持等於1功能。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 


void run_times(int runs); 

int main(){ 
    int i; 

    while (i <3) { 
     run_times(i); 
     printf("Looped\n"); 
     i++; 
    } 
} 

void run_times(int runs) { 
    int *x,k; 

    if (runs == 0) { 
     x = &k; 
     *x = 1; 
     printf("X is equal to %d and k is equal to%d\n", *x, k); 
    } 
    if (runs == 1){ 
     printf("X is equal to %d and k is equal to%d\n", *x, k); 
    } 

預先感謝

回答

1
void run_times(int runs) { 
    static int *x,k; 

static變量意味着變量保持調用之間的它的值。

請注意,所詢問的代碼正在運行未初始化的局部變量,即undefined behavior。因此,無論如何它可能會也可能不會工作,IDE將按照您的需要運行而不會發生任何更改! http://ideone.com/X7dqHr

請注意,我們沒有static變量的問題,因爲它們被初始化爲零。請參閱:Why are global and static variables initialized to their default values?

+0

謝謝,我希望我知道那是簡單的哈哈 –

0

您可以通過製作kstatic(在這種情況下確實不需要指針)來實現此目的。結果將類似於全局變量 - 這通常是一個壞主意。通常它更有意義作出聲明本地:

void run_times(int *x, int runs) { 
    printf("x is equal to %d\n", *x); 
    if (runs == 0) { 
     *x = 1; 
    } 
} 

這樣,它仍然可以工作,如果你決定你需要兩個獨立的國家:

int main() { 
    int k0 = 0; 
    int k1 = 2; 
    int i = 0; 
    while (i <3) { 
     run_times(&k0, i); 
     run_times(&k1, i); 
     i++; 
    } 
} 

還應該更明確的讀者,因爲你不通過隱藏變量傳遞數據。