ここで何が起こるかは次のとおりです。
- 文字列「hello」へのポインタを使用して
main
呼び出す関数でprintString
- 関数は
printString
次の文字を読み込もうとしますgetchar()
- 'h'の代わりにその文字を保存します
言語の規則では、その「h」を変更しようとすることは未定義動作であるとされています。運が良ければ、プログラムはクラッシュします。運が悪ければ、プログラムは機能しているように見えます。
要するに:getchar()
読書に使用されます。putchar()
書き込みに使用されます。
そして、あなたは5文字を書きたいと思います:'h'、'e'、'l'、'o'、そして別の'o'。
こんにちは
^chはポインタです
ch*chは「h」です-chは「h」を指します
その最後の「o」の後に何かありますか?がある!A。'\0'
_ ゼロバイトは文字列を終了します。だからこれを試してみてください(でprintString("hello");
)...
void printString(char *ch)
{
putchar(*ch); /* print 'h' */
ch = ch + 1; /* point to the next letter. */
/* Note we're changing the pointer, */
/* not what it points to: ch now points to the 'e' */
putchar(*ch); /* print 'e' */
ch = ch + 1; /* point to the next letter. */
putchar(*ch); /* print 'l' */
ch = ch + 1; /* point to the next letter. */
putchar(*ch); /* print 'l' */
ch = ch + 1; /* point to the next letter. */
putchar(*ch); /* print 'o' */
ch = ch + 1; /* point to the next letter. What next letter? The '\0'! */
}
または、ループでそれを書くことができます(そして異なる引数でmainから呼び出す)...
void printString(char *ch)
{
while (*ch != '\0')
{
putchar(*ch); /* print letter */
ch = ch + 1; /* point to the next letter. */
}
}