2015-09-26 86 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++; 
    } 
} 

还应该更明确的读者,因为你不通过隐藏变量传递数据。