を与える誰かが次のように説明することができます:同じ値を持つ2つの文字列リテラルを印刷すると、同じアドレスに
#include <stdio.h>
void some_fn(char *x)
{
printf("%d\n", x);
}
int main()
{
// They are stored on the same memory address
some_fn("A");
some_fn("A");
some_fn("B");
}
する理由:
some_fn("A");
some_fn("A");
プリントが同じメモリアドレスに格納されていること?
'' A ''は文字列リテラルなので、プログラムの読み取り専用部分に入る可能性が高く、コンパイラは" A "と" A "'が同じであるそれは一度だけ格納し、参照されるときはいつでもそのアドレスを使用します。また、 'printf("%p "...)でポインタを出力してください。 – yano
より良い質問は、*それらを同じアドレスに保存しないでください。 – Barmar
あなたはあなたの関数に 'char'sを渡していません。必要に応じて、 'char'へのポインタを渡しています。これらのポインタは、任意の配列の値が関数の引数として現れるときと同じように、文字列リテラル( 'char'の配列)がポインタに壊れた結果です。 –