3

私はCプログラミングの初心者です。そして、ポインターの無秩序な動作に混乱しています。特に文字列と配列に関しては。

みたいに書けないことはわかっていますが、

#include <stdio.h>
int main()
{
 int *number=5;
 printf("%d",*number);
} 

明らかにメモリの5番目の場所に書き込もうとするため、プログラムがクラッシュします。「番号」を初期化する必要があります。

しかし、文字列に関しては、次のように書くことができます。

#include <stdio.h>
int main()
{
 char *name="xxxxx";
 printf(name);
} 

そして、それも機能します。つまり、暗黙的に「名前」ポインターを初期化することを意味します。また、name=&name[0] も知っていますが、name=&name も見つけました。どうしてですか?なぜなら、私には同じ名前の 2 つの変数に見えるからです。文字列がメモリ内でどのように作成されるか教えてもらえますか?名前[0]の場所を入れてください。私が間違っていたようです。)

PS:-私の英語力はあまり良くないかもしれません。誰かが上記の問題に関するリンクを教えてくれたら幸いです。

4

5 に答える 5

1

基本的に、C コンパイラが式を見ると何が起こるか

char *name = "xxxxx";

と言うでしょう。これ"xxxxx"は定数文字列 (バイトで終わるバイトの配列0) であり、それを結果のプログラムのバイナリに入れます。次に、メモリの場所を文字列に置き換えます。次のようになります。

char *name = _some_secret_name_the_compiler_only_know;

where_some_secret_name_the_compiler_only_knowは、プログラムが実行されると文字列が存在するメモリ位置へのポインタです。そして、ファイルの解析に取り掛かります。

于 2013-05-02T09:10:26.170 に答える