【问题标题】:const char variable why does it work if I modify it?const char 变量如果我修改它为什么会起作用?
【发布时间】:2017-02-05 22:13:10
【问题描述】:

我有以下代码

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

【问题讨论】:

标签: c pointers


【解决方案1】:

usuario 在这种情况下不是常数。

提示:指针声明必须从右到左阅读

尝试阅读

const char *usuario= NULL;

从右到左,在本例中为usuario is a pointer to constant char

要将usuario 声明为常量,请执行

const char * const usuario= NULL;

上面的代码 sn-p 将使usuario 常量

尝试从右到左阅读上面的代码sn-p,在本例中为usuario is a constant pointer to a constant char

【讨论】:

  • 谢谢朋友!一件事,在这种情况下(在我上面的代码中)有必要在 char * usuarui=NULL 之前使用“const”?我不太明白在该代码中使用“const”的目的是什么......
  • @EmiliOrtega 不,这里没有必要。
  • 谢谢,最后,你能告诉我在什么情况下使用它是可取的吗?
  • @EmiliOrtega 在您希望指针指向一个持续对象时使用它
猜你喜欢
  • 2017-03-25
  • 2010-10-01
  • 2020-02-25
  • 1970-01-01
  • 2019-07-26
  • 2016-05-25
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
相关资源
最近更新 更多