1. ホーム
  2. c

[解決済み] 異なる文字列リテラルへの2つのcharポインタのアドレスが同じである

2023-08-25 10:49:04

質問

#include<stdio.h>
#include<string.h>

int main()
{
    char * p = "abc";
    char * p1 = "abc";
    printf("%d %d", p, p1);
}

2つのポインタの値を印刷すると、同じアドレスが印刷されます。なぜでしょうか?

どのように解決するのですか?

同じ内容の異なる2つの文字列リテラルを同じメモリ位置に配置するか、異なるメモリ位置に配置するかは、実装に依存します。

を常に扱う必要があります。 pp1 は、同じアドレスを指しているかどうか分からないので、(同じ内容であっても)2つの異なるポインタとして扱われます。コンパイラの最適化に頼るべきではありません。

C11 標準、6.4.5、文字列リテラル、セマンティクス

これらの配列は、その要素が適切な値を持っている場合、区別されるかどうかは特定されていません。 の要素が適切な値を持っている場合、これらの配列が区別されるかどうかは未定です。プログラムがこのような配列を変更しようとした場合 このような配列を変更しようとした場合、その動作は未定義です。


印刷時の書式は必ず %p :

  printf("%p %p", (void*)p, (void*)p1);

参照 この回答 をご覧ください。