構造体.p++
とした場合、
- 構造体アクセス(.)と後置インクリメント(++)は同じ優先度。
- 結合順序は左から右。
- 後置インクリメントはインクリメントする前の値を評価値として返す。
ことから、((構造体.p)++)
となると思うのですが、実際には(構造体.(p++))
になりました。(((構造体.p)++)
が実際にどう評価されるのかはよくわからないですが)
C
1#include <stdio.h> 2#define SIZE 5 3 4struct ST { 5 int* a; 6} st; 7int b[SIZE]; 8 9void print_all(void) { 10 int i; 11 for (i = 0; i < SIZE; i++) { 12 printf("%d: %d\n", i, b[i]); 13 } 14} 15 16int main(void) { 17 st.a = b; 18 *(st.a++) = 1; 19 20 print_all(); 21 22 return 0; 23}
出力:
0: 1 1: 0 2: 0 3: 0 4: 0
しかし、(構造体.(p++))
だとしても(構造体.(p++を評価した値))
となるのでなにかおかしい気がします。よくわからなくなってきました。構造体アクセスと後置インクリメントが同じ式に現れた場合どういう動作になるのでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/14 09:19
2021/03/14 09:33 編集
2021/03/14 09:40 編集
2021/03/14 10:09
2021/03/14 11:43
2021/03/14 12:28 編集
2021/03/14 12:22