0

違いはありますか:

char string = "name";
const char* point = string;

const char string[] = "name";

違いも教えてください。

4

2 に答える 2

5

はい。

1 つ目はメモリの読み取り専用セクションを指すだけで、実際には次のように宣言する必要があります。

const char* string = "name";

2 つ目は、文字列を保持するのに十分な長さの配列を作成し"name"(つまり、4 文字と null ターミネータの 1 文字)、割り当てられたスペース内に文字列をコピーします。

于 2013-02-26T20:14:48.323 に答える
0
#include <stdio.h>

int main(int argc, const char** argv)
{
    const char *a1 = "hello";
    const char a2[] = "hello";
    char* b1;
    char* b2;

    b2 = (char*) a2;
    *b2 = 'c';
    puts(b2);

    b1 = (char*)a1;
    *b1 = 'c';
    puts(b1);


    return 0;
}

b2 は 'cello' を正しく表示します。b1 はセグメンテーション違反を引き起こします。

これは、b1 がコードのテキスト セグメントに格納されているのに対し、b2 はデータ セグメントに格納されているためです。

私はそれを台無しにしなかったことを願っています...

また、コンパイラは、何かがテキストセグメントで宣言されているがコードでアクセスされていることを認識することにより、これを無効にする魔法を行うことができるため、Cは時々キャッチして、宣言をデータセグメントに変更します

于 2013-02-26T20:23:16.610 に答える