2015-09-26 2 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 остаются равными единице после выполнения второго функция.

#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++; 
    } 
} 

Он должен быть также ясно читателю , поскольку вы не передаете данные через скрытые переменные.

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