teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

ポインタ変数の場合を追加

2019/10/11 09:29

投稿

jimbe
jimbe

スコア13350

answer CHANGED
@@ -21,4 +21,14 @@
21
21
  printf("%d,¥t", x++);
22
22
  printf("%d,¥n", x);
23
23
  ```
24
- こうすればコメント通りに動作するかと思います.
24
+ こうすればコメント通りに動作するかと思います.
25
+
26
+ ----
27
+
28
+ ++ や -- で +1/-1 以外の動作をする場合として, ポインタ変数のインクリメント/デクリメントがあります.
29
+ 例えば, char *p に対し p++ を行うとポインタは +1 され, short *p に対し p++ では(short が 2バイトの処理系なら) +2 されます.
30
+ ```
31
+ short *p = (short *)0;
32
+ p++;
33
+ printf("%d\n",p);
34
+ ```

1

コード追加

2019/10/11 09:28

投稿

jimbe
jimbe

スコア13350

answer CHANGED
@@ -1,4 +1,24 @@
1
1
  考えるだけでなく実際に試してみることはとても大事かと思います.
2
2
  ですが, 残念ながら ++ や -- を連ねてもご想像のようには動作致しません.
3
3
 
4
- ++ や -- はコードの入力量を極力(1文字でも)少なくする為にあるような(もちろん他の理由もありますが)演算子ですので, 例えば +2 するために ```x++++;``` と書くのと ```X+=2;``` と書くのでは後者のほうが入力量が少なくなり, '+'を連ねる書き方は存在意義が薄れます.
4
+ ++ や -- はコードの入力量を極力(1文字でも)少なくする為にあるような(もちろん他の理由もありますが)演算子ですので, 例えば +2 するために ```x++++;``` と書くのと ```X+=2;``` と書くのでは後者のほうが入力量が少なくなり, '+'を連ねる書き方は存在意義が薄れます.
5
+
6
+ なお,
7
+ ```
8
+ /*下記で10、11、12、13、14と表示したい*/
9
+ printf("%d,¥t", x);
10
+ printf("%d,¥t", x++);
11
+ printf("%d,¥t", x++++);
12
+ printf("%d,¥t", x++++++);
13
+ printf("%d,¥n", x++++++++);
14
+ ```
15
+ は例え ++ を連ねたらその分加算が増えるという動作をしたとしても, コメントのようには動作しないと思います.
16
+ ```
17
+ /*下記で10、11、12、13、14と表示したい*/
18
+ printf("%d,¥t", x++);
19
+ printf("%d,¥t", x++);
20
+ printf("%d,¥t", x++);
21
+ printf("%d,¥t", x++);
22
+ printf("%d,¥n", x);
23
+ ```
24
+ こうすればコメント通りに動作するかと思います.