質問編集履歴

6

修正

2017/01/24 08:33

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -90,9 +90,9 @@
90
90
 
91
91
 
92
92
 
93
- int array[4][10]
93
+ char array[4][10]
94
94
 
95
- int (*arp)[10] = array;
95
+ char (*arp)[10] = array;
96
96
 
97
97
 
98
98
 
@@ -116,9 +116,9 @@
116
116
 
117
117
  ポインタのポインタの初期化について、考察してもらっている方もいらっしゃるのですが、
118
118
 
119
- int array[4][10]
119
+ char array[4][10]
120
120
 
121
- int (*arp)[10] = array; ← arpはポインタで要素数4つの配列の先頭アドレスを持っていると思います。
121
+ char (*arp)[10] = array; ← arpはポインタで要素数4つの配列の先頭アドレスを持っていると思います。
122
122
 
123
123
 
124
124
 
@@ -171,3 +171,17 @@
171
171
  「データ構造が違うから初期化できない」
172
172
 
173
173
  上記のプログラムができているので、むしろ初期化できないとおかしいような気がします。
174
+
175
+
176
+
177
+ > [修正]
178
+
179
+
180
+
181
+ 大変申し訳ありません。
182
+
183
+ int型とchar型を混合してしまいました。
184
+
185
+ 修正しまいした。
186
+
187
+ **すべてchar型です。**

5

修正

2017/01/24 08:33

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -160,7 +160,7 @@
160
160
 
161
161
  なのに、最初の質問のように・・・
162
162
 
163
- char (*q)[100] = q;
163
+ char (*q)[100] = buf;
164
164
 
165
165
  p = &q
166
166
 

4

修正

2017/01/24 07:43

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -50,7 +50,7 @@
50
50
 
51
51
  char (*q)[100] = buf;
52
52
 
53
- p = q;
53
+ p = &q;
54
54
 
55
55
  ```
56
56
 
@@ -160,7 +160,9 @@
160
160
 
161
161
  なのに、最初の質問のように・・・
162
162
 
163
- char (*q)[100] = buf;
163
+ char (*q)[100] = q;
164
+
165
+ p = &q
164
166
 
165
167
 
166
168
 

3

追記

2017/01/24 07:43

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -107,3 +107,65 @@
107
107
  たった1つしかないポインタが同時に4つのアドレスを指しているなんて・・・
108
108
 
109
109
  どういうことですか??
110
+
111
+
112
+
113
+ > [追記2]
114
+
115
+
116
+
117
+ ポインタのポインタの初期化について、考察してもらっている方もいらっしゃるのですが、
118
+
119
+ int array[4][10]
120
+
121
+ int (*arp)[10] = array; ← arpはポインタで要素数4つの配列の先頭アドレスを持っていると思います。
122
+
123
+
124
+
125
+ つまり・・・・・一次元配列・・・ということになりますよね??
126
+
127
+ arp[0], arp[1] ・・というのが、要素数10個ある配列の先頭を表すことで、あたかも2次元配列のようになる
128
+
129
+ と解釈しました。
130
+
131
+
132
+
133
+ しかし、
134
+
135
+ ```
136
+
137
+ char ii[4] = "GHYU";
138
+
139
+ char *qq = ii;
140
+
141
+ char **pp = &qq; // char *pp = &qq; これは無理!
142
+
143
+ ```
144
+
145
+ これは、問題がありません。
146
+
147
+ ポインタのポインタを初期化できています。
148
+
149
+
150
+
151
+ char (*arp)[10]; はこれに似ていと思います。
152
+
153
+ あたかも「char ii[4] = "GHYU";」+「char *qq = ii;」これを1つにしたような感じです。
154
+
155
+
156
+
157
+ G, H, Y, U が要素数10個配列の先頭の文字だと想像してください。
158
+
159
+
160
+
161
+ なのに、最初の質問のように・・・
162
+
163
+ char (*q)[100] = buf;
164
+
165
+
166
+
167
+ これができない理由が・・・見当たらないです。
168
+
169
+ 「データ構造が違うから初期化できない」
170
+
171
+ 上記のプログラムができているので、むしろ初期化できないとおかしいような気がします。

2

追記

2017/01/24 07:20

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -83,3 +83,27 @@
83
83
 
84
84
 
85
85
  どなたか教えてください!
86
+
87
+
88
+
89
+ > [追記]
90
+
91
+
92
+
93
+ int array[4][10]
94
+
95
+ int (*arp)[10] = array;
96
+
97
+
98
+
99
+ たとえば、こうなった場合・・・
100
+
101
+ arpという**1つのポインタ**が**4つの配列の先頭アドレス**を指しているということですよね?
102
+
103
+ ・・・・??
104
+
105
+ なんかおかしくないですかね?
106
+
107
+ たった1つしかないポインタが同時に4つのアドレスを指しているなんて・・・
108
+
109
+ どういうことですか??

1

追記

2017/01/23 06:29

投稿

strike1217
strike1217

スコア651

test CHANGED
File without changes
test CHANGED
@@ -72,6 +72,12 @@
72
72
 
73
73
  プログラムの例を見ているとよく出てきます。
74
74
 
75
+
76
+
77
+ printf("p[1] : %p, p[1][0] : %p\n", p[1], &p[1][0]);
78
+
79
+ おまけに2次元配列のようにアクセスもできています・・・・!?
80
+
75
81
  正直、よくわかってないです。
76
82
 
77
83