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

回答編集履歴

7

リンクの修正

2019/11/20 08:18

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -37,4 +37,4 @@
37
37
 
38
38
  下記リンク先に飛んで少し待つと画面が画像のように切り替わります。
39
39
  『Next』ボタンでワンステップずつ処理を進められますから、観察してみて下さい。
40
- [Visualize Python, Java, JavaScript, C, C++, Ruby code execution](http://www.pythontutor.com/visualize.html#code=int%20main%28void%29%7B%0A%20%20%20%20int%20arr%5B%5D%20%3D%20%7B3,%201,%204,%201,%205,%209,%202%7D%3B%0A%20%20%20%20int%20*p%20%3D%20arr%2B1%3B%0A%20%20%20%20%0A%20%20%20%20%28*p%29%2B%2B%3B%0A%20%20%20%20int%20n%20%3D%20*%28p%2B%2B%29%3B%0A%20%20%20%20int%20m%20%3D%20*p%2B%2B%3B%0A%20%20%0A%20%20%20%20return%200%3B%0A%7D&cumulative=false&curInstr=4&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=c&rawInputLstJSON=%5B%5D&textReferences=false)
40
+ [Visualize Python, Java, JavaScript, C, C++, Ruby code execution](http://www.pythontutor.com/visualize.html#code=int%20main%28void%29%7B%0A%20%20%20%20int%20arr%5B%5D%20%3D%20%7B3,%201,%204,%201,%205,%209,%202%7D%3B%0A%20%20%20%20int%20*p%20%3D%20arr%2B1%3B%0A%20%20%20%20%0A%20%20%20%20%28*p%29%2B%2B%3B%0A%20%20%20%20int%20n%20%3D%20*%28p%2B%2B%29%3B%0A%20%20%20%20int%20m%20%3D%20*p%2B%2B%3B%0A%20%20%0A%20%20%20%20return%200%3B%0A%7D&cumulative=false&curInstr=0&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=c&rawInputLstJSON=%5B%5D&textReferences=false)

6

追記

2019/11/20 08:17

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -28,4 +28,13 @@
28
28
 
29
29
  > ③(*p)++;の()の意味が分かりません。*p++;ではなぜ値が変わるのでしょうか?
30
30
 
31
- *p++ は *(p++) と同じだからです。
31
+ *p++ は *(p++) と同じだからです。
32
+
33
+ 追記
34
+ ---
35
+ このようにコードの動作を可視化するサービスを使うと、少しイメージを固めやすいです。
36
+ ![実行イメージ](c1f37c2f3da453b6d6128e68b4f62829.png)
37
+
38
+ 下記リンク先に飛んで少し待つと画面が画像のように切り替わります。
39
+ 『Next』ボタンでワンステップずつ処理を進められますから、観察してみて下さい。
40
+ [Visualize Python, Java, JavaScript, C, C++, Ruby code execution](http://www.pythontutor.com/visualize.html#code=int%20main%28void%29%7B%0A%20%20%20%20int%20arr%5B%5D%20%3D%20%7B3,%201,%204,%201,%205,%209,%202%7D%3B%0A%20%20%20%20int%20*p%20%3D%20arr%2B1%3B%0A%20%20%20%20%0A%20%20%20%20%28*p%29%2B%2B%3B%0A%20%20%20%20int%20n%20%3D%20*%28p%2B%2B%29%3B%0A%20%20%20%20int%20m%20%3D%20*p%2B%2B%3B%0A%20%20%0A%20%20%20%20return%200%3B%0A%7D&cumulative=false&curInstr=4&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=c&rawInputLstJSON=%5B%5D&textReferences=false)

5

追記

2019/11/20 08:16

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -15,6 +15,8 @@
15
15
  }
16
16
  ```
17
17
 
18
+ p=a+1 は p=&a[0]+1 と同じです。
19
+
18
20
  > しかしprintfで表示するとどこから出てきた数字かわからないものが出力されました。
19
21
 
20
22
  文字列を出力する際は、書式指定子 %s を使って下さい。

4

追記

2019/11/20 06:10

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -2,7 +2,19 @@
2
2
 
3
3
  はい。
4
4
  ただし、文脈によっては先頭要素を指すポインタとして振る舞うことがあります。
5
+ ```C
6
+ #include <stdio.h>
5
7
 
8
+ int main(void) {
9
+ int arr[] = {3, 1, 4, 1, 5, 9, 2};
10
+ if(arr == &arr[0]) {
11
+ printf("arr == &arr[0]\n"); // この行が実行されます
12
+ }
13
+
14
+ return 0;
15
+ }
16
+ ```
17
+
6
18
  > しかしprintfで表示するとどこから出てきた数字かわからないものが出力されました。
7
19
 
8
20
  文字列を出力する際は、書式指定子 %s を使って下さい。

3

追記

2019/11/20 06:09

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,5 +1,10 @@
1
- > ①aは配列という考えであっていますでしょうか?しかしprintfで表示するとどこから出てきた数字かわからないものが出力されました。
1
+ > ①aは配列という考えであっていますでしょうか?
2
2
 
3
+ はい。
4
+ ただし、文脈によっては先頭要素を指すポインタとして振る舞うことがあります。
5
+
6
+ > しかしprintfで表示するとどこから出てきた数字かわからないものが出力されました。
7
+
3
8
  文字列を出力する際は、書式指定子 %s を使って下さい。
4
9
 
5
10
  > ② *p=a+1;において配列に1を足した*pに何の値が入っているのでしょうか?

2

修正

2019/11/20 06:05

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  > ② *p=a+1;において配列に1を足した*pに何の値が入っているのでしょうか?
6
6
 
7
7
  配列の先頭アドレスの次のアドレスです。
8
- また int * までがpの型なので、*p=a+1 というより p=a+1 です。
8
+ また char * までがpの型なので、*p=a+1 というより p=a+1 です。
9
9
 
10
10
  > ③(*p)++;の()の意味が分かりません。*p++;ではなぜ値が変わるのでしょうか?
11
11
 

1

修正

2019/11/20 05:58

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  > ② *p=a+1;において配列に1を足した*pに何の値が入っているのでしょうか?
6
6
 
7
- 配列の先頭ポインタの次のアドレスです。
7
+ 配列の先頭アドレスの次のアドレスです。
8
8
  また int * までがpの型なので、*p=a+1 というより p=a+1 です。
9
9
 
10
10
  > ③(*p)++;の()の意味が分かりません。*p++;ではなぜ値が変わるのでしょうか?