C语言 是否可以使用用户输入来设置const



用C语言编程时,是否可以将const设置为用户输入的值?如果有,怎么做?

为什么不呢?

void some_function(int user_input)
{
    const int const_user_input = user_input;
    ...
    return;
}
int main (void)
{
    int user_input;
    scanf("%d", &user_input);
    some_function(user_input);
    return 0;
}

你甚至可以比Dadam的回答更直接。(通常我会在注释中添加注释,但直接在代码中添加注释更容易)

int get_user_input(void)
{
    int user_input;
    scanf("%d", &user_input);
    return user_input;
}
int main(void)
{
    int const user_input = get_user_input();
    ...
    return 0;
}

是的,你可以。

#include <stdio.h>
int main()
{
   printf("enter your number : ");
   const int i = scanf("%d",&i)*i;
   printf("%d",i);
}

让我解释一下这段代码是如何工作的。首先,您应该知道scanf()函数返回的integer值等于它从用户读取的项数。

例如:

1) scanf("%d",&a);这个语句返回值1,因为它只读取一个项目。

2) scanf("%d %d",&a,&b);这个语句返回值2,因为它读取了两个整数ab

类似地,当我们将scanf("%d",&i)*i赋值给i时,它将得到值1乘以i的值(我们将其作为输入)。因此,您将得到与i相同的值。

链接器通常将全局const定位在只读空间(如代码空间),因此以后不能更改

参见关于local const

的注释

除了其他答案(都说不)之外,您还可以做一些难看的事情,如

static const int notsoconst = 3;
scanf("%d", ((int*) &notsoconst));

但是这可以编译,但是它可能会在运行时崩溃(并且在C语言规范中是未定义的行为),因为notsoconst将被放在只读段中(至少在Linux上的GCC中是这样)。

即使它是可行的,我也不建议这样编码。即使您的实现没有在某些只读段中放置常量,编译器也可以期望const永远不会改变(如语言标准中指定的那样),并允许使用此假设进行优化。

C语言中的const变量在技术上是只读的。所以不能从user-input

设置

相关内容

  • 没有找到相关文章

最新更新