如何声明具有常量变量的指针

时间:2015-09-26 18:04:36

标签: c pointers integer

以下是我的代码: 当我运行它时,我得到以下声明:

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

我希望实现的是让两个陈述说明相同的事情(等于1)。我理解我可以在if语句下面分别将整数x和k分别设置为1,但是我想知道在执行函数后如何存储一个值,这样在执行第二个函数后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);
    }

提前致谢

2 个答案:

答案 0 :(得分: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?

答案 1 :(得分:0)

你可以通过使k静态来实现这一点(在这种情况下实际上不需要指针)。结果将类似于全局变量 - 这通常是一个坏主意。通常,将声明设为本地更有意义: void run_times(int * x,int runs){     printf(“x等于%d \ n”,* x);     if(runs == 0){         * x = 1;     } } 这样,如果您决定需要两个独立的状态,它仍然可以工作: int main(){     int k0 = 0;     int k1 = 2;     int i = 0;     而(i <3){         run_times(&amp; k0,i);         run_times(&amp; k1,i);         我++;     } } 读者也应该更清楚,因为你没有通过隐藏变量传递数据。