1

私はCプログラミングを学んでいますが、私の本には、変数とは異なり、プログラムの実行中に定数を変更することはできないと書かれています。そして、それらはリテラルとシンボリックの2つのタイプの定数です。シンボリックはかなりよく理解していると思います。しかし、リテラル定数は私を混乱させています。それが私に与えた例は

int count = 20;

この単純なプログラムを作成し、リテラル定数の値を変更することができました。

/* 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)

誰かがこれがどのように起こるかを説明できますか、私はそれを間違っていると宣言していますか?または、通常の変数とリテラル定数の間に違いはありますか?

-ありがとう

4

3 に答える 3

3

リテラル定数は20です。の値は変更できますが、たとえば、countの値を変更することはできません。2019

(いくつかの雑学クイズとして、これを正確に実行できるバージョンのFORTRANがあるので、話すのは無意味ではありません)

于 2013-02-25T04:49:27.270 に答える
0

この場合のリテラルは数値22(および後で数値212345)です。このリテラルを変数に割り当てますtesting。この変数は変更できます。

文字列と文字列リテラルに関しては、これは少し注意が必要です。文字列リテラルへのポインタがある場合は、実際のポインタを変更して他の文字列を指すようにすることもできますが、元のポインタが指すものを変更することもできます。

例えば:

const char *string_pointer = "Foobar";

上記の定義では、たとえば、ポインタが指すリテラル文字列を変更しようとするため、実行できません。string_pointer[0] = 'L';


コンテキストに応じて、シンボリック定数は、として宣言された「変数」constまたはプリプロセッサマクロのいずれかになります。

于 2013-02-25T04:51:29.637 に答える
0

Cのリテラル定数は、それ自体が任意の数です。たとえば、20。たとえば、を実行して変更することはできません20 = 50;。それは違法です。

定数変数もありますconst int blah = 42;blahのようなことでこれを変更することはできませんblah = 100;

ただし、たとえば、通常の非定数変数がある場合はint foo = 123;、それを変更できますfoo = 456;

于 2013-02-25T04:56:17.040 に答える