用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,因为它读取了两个整数a
和b
。
类似地,当我们将scanf("%d",&i)*i
赋值给i
时,它将得到值1乘以i
的值(我们将其作为输入)。因此,您将得到与i
相同的值。
链接器通常将全局const定位在只读空间(如代码空间),因此以后不能更改
参见关于local const
除了其他答案(都说不)之外,您还可以做一些难看的事情,如
static const int notsoconst = 3;
scanf("%d", ((int*) ¬soconst));
但是这可以编译,但是它可能会在运行时崩溃(并且在C语言规范中是未定义的行为),因为notsoconst
将被放在只读段中(至少在Linux上的GCC中是这样)。
即使它是可行的,我也不建议这样编码。即使您的实现没有在某些只读段中放置常量,编译器也可以期望const
永远不会改变(如语言标准中指定的那样),并允许使用此假设进行优化。
C语言中的const变量在技术上是只读的。所以不能从user-input