の部材としてチャーポインタIはK & R(ページ:133)から、実施例structure
を取り、structure
のarray
にpointer
に少数pointer
演算を試みました。ポインタ演算:構造体
#include <stdio.h>
// struct example from K&R
struct key {
char *word;
int count;
}keytab[] = {
"auto",0,
"break",0,
"const",0,
/*.....*/
"case",0
};
int main() {
struct key *ptr1 = keytab;
printf("%d\n",sizeof(struct key));
//check1
printf("%s\n",ptr1++->word); //1
printf("%s\n",ptr1->word); //2
//check2
printf("%s\n",++ptr1->word); //3
printf("%s\n",++ptr1->word); //4
//check3
printf("%s\n",ptr1++->word); //5
printf("%s\n",ptr1->word); //6 ??
}
出力:
8
auto
break
reak
eak
eak
const
私は、演算子の優先順位の助けを借りて3rd
と4th
printf
の出力を理解することができます。
しかし、5th
と6th
printf
の場合、ptr1
はどのようにインクリメントされていますか?プログラムの出力は1st & 2nd
printf
と同様の動作を示します。 ptr1
が1つの構造体サイズ(ここでは8
バイト)のステップでインクリメントした場合、それはどのようにしてkeytab[2]
の開始に位置合わせされます。
私は間違ったことを理解しているかもしれませんが、この最後のクエリが無効かもしれないので、説明してください!
ありがとうございました!
@thanksこの回答は私の疑問を解決します。 – Debashish
'しかし、ptr1-> wordの変更はptr1自体の値に影響しないことを見落としました。はい、私は 'ptr1'が前進していると思いました。 – Debashish