const char变量为什么我修改它会起作用?

时间:2017-02-05 22:13:11

标签: 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' && 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;

修改。

1 个答案:

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