質問編集履歴
6
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -44,8 +44,8 @@
|
|
44
44
|
|
45
45
|
> [追記]
|
46
46
|
|
47
|
-
|
47
|
+
char array[4][10]
|
48
|
-
|
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
|
-
|
60
|
+
char array[4][10]
|
61
|
-
|
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
修正
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] =
|
82
|
+
char (*q)[100] = buf;
|
83
83
|
p = &q
|
84
84
|
|
85
85
|
これができない理由が・・・見当たらないです。
|
4
修正
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] =
|
82
|
+
char (*q)[100] = q;
|
83
|
+
p = &q
|
83
84
|
|
84
85
|
これができない理由が・・・見当たらないです。
|
85
86
|
「データ構造が違うから初期化できない」
|
3
追記
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
追記
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
追記
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
|
どなたか教えてください!
|