我正在学习C编程,我的书中说,与变量不同,常量在程序执行期间无法更改。并且它们是两种类型的常量Literal和Symbolic。我认为我很了解Symbolic。但是Literal Constants让我感到困惑。 它给我的例子是
int count = 20;
我写了这个简单的程序,我可以改变Literal Constant的值。
/* Demonstrates variables and constants */
#include <stdio.h>
/* Trying to figure out if literal constants are any different from variables */
int testing = 22;
int main( void )
{
/* Print testing before changing the value */
printf("\nYour int testing has a value of %d", testing);
/* Try to change the value of testing */
testing = 212345;
/* Print testing after changing the value */
printf("\nYour int testing has a value of %d", testing);
return 0;
}
输出了这个:
Your int testing has a value of 22
Your int testing has a value of 212345
RUN SUCCESSFUL (total time: 32ms)
有人可以解释这是怎么发生的,我是否宣布错了?或者正常变量和文字常量之间有什么区别吗?
-Thanks
答案 0 :(得分:3)
文字常量是20
。您可以更改count
的值,但不能将20
的值更改为19
。
(作为一些琐事,有一些版本的FORTRAN你可以做到这一点,所以谈论它并没有意义)
答案 1 :(得分:0)
在这种情况下,文字是数字22
(后面是数字212345
)。您将此文字分配给变量testing
。这个变量可以改变。
在字符串和字符串文字方面,这有点棘手。如果您有一个指向字符串文字的指针,您可以将实际指针更改为指向其他字符串,但您可以更改原始指针指向的内容。
例如:
const char *string_pointer = "Foobar";
根据上述定义,您可以不执行以下操作: string_pointer[0] = 'L';
,因为这是尝试修改指针指向的文字字符串。
根据上下文,符号常量可以是声明为const
的“变量”,也可以是预处理器宏。
答案 2 :(得分:0)
C中的文字常数本身就是任何数字,例如你的20
。你不能通过做20 = 50;
来改变它。这是非法的。
还有一些常数变量,例如: const int blah = 42;
。您无法通过执行blah
等操作来更改此blah = 100;
。
但是如果你有一个正常的非常数变量,例如int foo = 123;
,您可以更改它,例如foo = 456;
。