const char变量如果我修改它,它为什么工作?

const char变量如果我修改它,它为什么工作?,c,pointers,C,Pointers,我有以下代码 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'

我有以下代码

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修改

usuario
在这种情况下不是常数

提示:指针声明必须从右向左读取

试着阅读

const char *usuario= NULL;
在本例中,从右到左,
usuario是指向常量char的指针

要将
usuario
声明为常量,请执行以下操作

const char * const usuario= NULL;
上面的代码片段将使usuario保持常量


试着从右到左阅读上面的代码片段,在本例中,
usuario是指向常量char的常量指针

usuario在本例中不是常量

提示:指针声明必须从右向左读取

试着阅读

const char *usuario= NULL;
在本例中,从右到左,
usuario是指向常量char的指针

要将
usuario
声明为常量,请执行以下操作

const char * const usuario= NULL;
上面的代码片段将使usuario保持常量


试着从右到左阅读上面的代码片段,在本例中,
usuario是指向常量char的常量指针

usuario
不是
const
。它所指的是
const
。thx Micho,一个问题,我该如何将灰色框放入代码中?我用了“``”,但没用。
usuario
不是
const
。它所指的是
const
。thx Micho,一个问题,我该如何将灰色框放入代码中?我用了“``”,但没用谢谢你的朋友!一件事,在这种情况下(在我上面的代码中),有必要在char*usuarui=NULL之前使用“const”吗?我不太明白在那个代码中使用“const”的目的是什么…@EmiliOrtega不,这里不需要它。thx,最后,你能告诉我在什么情况下使用它是明智的吗?@EmiliOrtega当你想让指针指向contant对象时使用它谢谢你的朋友!一件事,在这种情况下(在我上面的代码中),有必要在char*usuarui=NULL之前使用“const”吗?我不太明白在代码中使用“const”的目的是什么…@EmiliOrtega不,这里不需要它。thx,最后,你能告诉我在什么情况下使用它是明智的吗?@EmiliOrtega当你想让指针指向一个contant对象时使用它