文字常数和&之间的差异正常变量?

时间:2013-02-25 04:47:54

标签: c

我正在学习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

3 个答案:

答案 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;