2017-02-05 1 views
1

я следующий кодconst char variable, почему он работает, если я его модифицирую?

int main(int argc, char **argv, char **envp) 
{ 
    const char *usuario= NULL; 
    while(*envp) 
    { 
     char *str = *envp++; 
     //if(strcmp(str,"USERNAME")==0) 
     if(str[0] == 'U' && str[1] == 'S' && str[2]=='E' && str[3]=='R' && str[4] == 'N') 
     { 
      usuario = str; 
      break; 
     } 
    } 
    if(usuario != NULL) 
    { 
     printf("Hola, bienvenido al programa %s",usuario); 
    } 
    return 0; 
} 

И мой вопрос, почему это работает? Эта переменная «usuario» была определена как NULL имеет тип CONST. Предполагается, что эти переменные не могут быть изменены во всей программе, но затем в то время, когда оно было изменено на usuario = str;

+0

http://stackoverflow.com/questions/7736049/const-char-pointer-assignments –

+2

'usuario' не является' const' , На что он указывает, 'const'. – chux

+0

thx Micho, вопрос, Как поставить этот серый квадрат в код? Я использовал «' », но не работал. – EmiliOrtega

ответ

4

usuario не является постоянным в этом случае.

Совет: декларации Указатель должен быть прочитан справа налево

Попробуйте прочитать

const char *usuario= NULL; 

справа налево, в этом случае, usuario is a pointer to constant char

Объявить usuario, как постоянный, до

const char * const usuario= NULL; 

Выше фрагмента кода будет usuarioпостоянный.

Попробуйте прочитать выше фрагмент кода справа налево, в этом случае, usuario is a constant pointer to a constant char

+0

Спасибо, друг! вещь, в этом случае (в моем коде выше) необходимо использовать «const» перед char * usuarui = NULL? Я не совсем понимаю, в чем цель использования «const» в этом коде ... – EmiliOrtega

+0

@EmiliOrtega нет, здесь не нужно. – Yousaf

+0

thx, и, наконец, не могли бы вы сказать мне, в каком случае целесообразно использовать его? – EmiliOrtega