1

char *p は「char型へのポインタ」を意味することを学びました

また、charが読むことを意味することも学んだと思います

そのポインタがその宛先に到達すると、その量のメモリ。

結論として、

char *p = "hello World";

p には文字列のアドレスが含まれ、

pそれを指している

質問。

  1. p が文字列を指している場合、「h」だけを読み取るべきではありませんか??? 文字のサイズしか読み取らないので?
    なぜ `printf("%s", p) は文字列全体を出力するのですか???

  2. また、Rithcie の本で、ポインター変数にはデータ型がないことも学びました。本当???

4

5 に答える 5

5

したがって、文字列「hello world」はメモリを占有します。

[h][e][l][l][o][ ][w][o][r][l][d][\0]
[0][1][2][3][4][5][6][7][8][9][A][B ]

実際、ポインターpは最初のバイトのみを指します。この場合はバイト 0 です。

printf("%s", p)

次にprintf、ヌル文字を取得するまで印刷することを知っています\0。これが、「h」だけでなく文字列全体を印刷する理由です。

2 番目の質問については、ポインタはデータ型を持っています。p口に出して言えば、 の場合は「文字へのポインター」、 の場合は「整数へのポインター」のような名前になるでしょうint *i

于 2013-05-16T17:23:35.390 に答える
1

ポインター変数はデータ型を保持するのではなく、アドレスを保持します。ただし、データ型を使用するため、そのポインターを使用してメモリから読み取るときに、各ステップで何バイト進むかがわかります。

を呼び出すとprintf%s式の は関数に *p で示されるアドレスから読み取りを開始し (前述のように「h」のバイト値を保持します)、終了文字に到達すると読み取りを停止するように指示します。これは、視覚的な表現を持たない文字です (\0コードで参照します)。文字列の終了位置をプログラムに伝えます。

于 2013-05-16T17:25:28.643 に答える
0

ここで *p は、メモリ内のある場所へのポインタであり、1 バイト (または char) であると想定されます。したがって、「h」文字を指します。だからp[0] or *(p+0)あなたにpを与えるでしょう。しかし、あなたの文字列は目に見えない文字で終わって\0いるので、printf関数を使用すると、*pが指すものから始まり、`\0'までのすべてのシンボルが出力されます。

そして、ポインターは単なる変数であり、いくつかのアドレス (4、8、またはそれ以上のバイト) を保持できます。

于 2013-05-16T17:25:11.710 に答える