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

質問編集履歴

6

修正

2017/01/24 08:33

投稿

strike1217
strike1217

スコア651

title CHANGED
File without changes
body CHANGED
@@ -44,8 +44,8 @@
44
44
 
45
45
  > [追記]
46
46
 
47
- int array[4][10]
47
+ char array[4][10]
48
- int (*arp)[10] = array;
48
+ char (*arp)[10] = array;
49
49
 
50
50
  たとえば、こうなった場合・・・
51
51
  arpという**1つのポインタ**が**4つの配列の先頭アドレス**を指しているということですよね?
@@ -57,8 +57,8 @@
57
57
  > [追記2]
58
58
 
59
59
  ポインタのポインタの初期化について、考察してもらっている方もいらっしゃるのですが、
60
- int array[4][10]
60
+ char array[4][10]
61
- int (*arp)[10] = array; ← arpはポインタで要素数4つの配列の先頭アドレスを持っていると思います。
61
+ char (*arp)[10] = array; ← arpはポインタで要素数4つの配列の先頭アドレスを持っていると思います。
62
62
 
63
63
  つまり・・・・・一次元配列・・・ということになりますよね??
64
64
  arp[0], arp[1] ・・というのが、要素数10個ある配列の先頭を表すことで、あたかも2次元配列のようになる
@@ -84,4 +84,11 @@
84
84
 
85
85
  これができない理由が・・・見当たらないです。
86
86
  「データ構造が違うから初期化できない」
87
- 上記のプログラムができているので、むしろ初期化できないとおかしいような気がします。
87
+ 上記のプログラムができているので、むしろ初期化できないとおかしいような気がします。
88
+
89
+ > [修正]
90
+
91
+ 大変申し訳ありません。
92
+ int型とchar型を混合してしまいました。
93
+ 修正しまいした。
94
+ **すべてchar型です。**

5

修正

2017/01/24 08:33

投稿

strike1217
strike1217

スコア651

title CHANGED
File without changes
body CHANGED
@@ -79,7 +79,7 @@
79
79
  G, H, Y, U が要素数10個配列の先頭の文字だと想像してください。
80
80
 
81
81
  なのに、最初の質問のように・・・
82
- char (*q)[100] = q;
82
+ char (*q)[100] = buf;
83
83
  p = &q
84
84
 
85
85
  これができない理由が・・・見当たらないです。

4

修正

2017/01/24 07:43

投稿

strike1217
strike1217

スコア651

title CHANGED
File without changes
body CHANGED
@@ -24,7 +24,7 @@
24
24
  char **p;
25
25
  // char *q[3] = {buf[0], buf[1], buf[2]}; こっちは成功
26
26
  char (*q)[100] = buf;
27
- p = q;
27
+ p = &q;
28
28
  ```
29
29
  これをやると、warningが出てきて、さらに落ちます・・・・
30
30
  なぜかわかりませんが・・・
@@ -79,7 +79,8 @@
79
79
  G, H, Y, U が要素数10個配列の先頭の文字だと想像してください。
80
80
 
81
81
  なのに、最初の質問のように・・・
82
- char (*q)[100] = buf;
82
+ char (*q)[100] = q;
83
+ p = &q
83
84
 
84
85
  これができない理由が・・・見当たらないです。
85
86
  「データ構造が違うから初期化できない」

3

追記

2017/01/24 07:43

投稿

strike1217
strike1217

スコア651

title CHANGED
File without changes
body CHANGED
@@ -52,4 +52,35 @@
52
52
  ・・・・??
53
53
  なんかおかしくないですかね?
54
54
  たった1つしかないポインタが同時に4つのアドレスを指しているなんて・・・
55
- どういうことですか??
55
+ どういうことですか??
56
+
57
+ > [追記2]
58
+
59
+ ポインタのポインタの初期化について、考察してもらっている方もいらっしゃるのですが、
60
+ int array[4][10]
61
+ int (*arp)[10] = array; ← arpはポインタで要素数4つの配列の先頭アドレスを持っていると思います。
62
+
63
+ つまり・・・・・一次元配列・・・ということになりますよね??
64
+ arp[0], arp[1] ・・というのが、要素数10個ある配列の先頭を表すことで、あたかも2次元配列のようになる
65
+ と解釈しました。
66
+
67
+ しかし、
68
+ ```
69
+ char ii[4] = "GHYU";
70
+ char *qq = ii;
71
+ char **pp = &qq; // char *pp = &qq; これは無理!
72
+ ```
73
+ これは、問題がありません。
74
+ ポインタのポインタを初期化できています。
75
+
76
+ char (*arp)[10]; はこれに似ていと思います。
77
+ あたかも「char ii[4] = "GHYU";」+「char *qq = ii;」これを1つにしたような感じです。
78
+
79
+ G, H, Y, U が要素数10個配列の先頭の文字だと想像してください。
80
+
81
+ なのに、最初の質問のように・・・
82
+ char (*q)[100] = buf;
83
+
84
+ これができない理由が・・・見当たらないです。
85
+ 「データ構造が違うから初期化できない」
86
+ 上記のプログラムができているので、むしろ初期化できないとおかしいような気がします。

2

追記

2017/01/24 07:20

投稿

strike1217
strike1217

スコア651

title CHANGED
File without changes
body CHANGED
@@ -40,4 +40,16 @@
40
40
  おまけに2次元配列のようにアクセスもできています・・・・!?
41
41
  正直、よくわかってないです。
42
42
 
43
- どなたか教えてください!
43
+ どなたか教えてください!
44
+
45
+ > [追記]
46
+
47
+ int array[4][10]
48
+ int (*arp)[10] = array;
49
+
50
+ たとえば、こうなった場合・・・
51
+ arpという**1つのポインタ**が**4つの配列の先頭アドレス**を指しているということですよね?
52
+ ・・・・??
53
+ なんかおかしくないですかね?
54
+ たった1つしかないポインタが同時に4つのアドレスを指しているなんて・・・
55
+ どういうことですか??

1

追記

2017/01/23 06:29

投稿

strike1217
strike1217

スコア651

title CHANGED
File without changes
body CHANGED
@@ -35,6 +35,9 @@
35
35
  char (*p)[10];
36
36
  この子の他の使い方はあります??
37
37
  プログラムの例を見ているとよく出てきます。
38
+
39
+ printf("p[1] : %p, p[1][0] : %p\n", p[1], &p[1][0]);
40
+ おまけに2次元配列のようにアクセスもできています・・・・!?
38
41
  正直、よくわかってないです。
39
42
 
40
43
  どなたか教えてください!