質問編集履歴

3

2次元配列をパラメータで渡す(対策2)を試しましたがエラーが消せません。対策3に内容記載しました

2021/10/22 07:11

投稿

fukuro
fukuro

スコア3

test CHANGED
File without changes
test CHANGED
@@ -213,3 +213,63 @@
213
213
  結果はyp[i][j]で値を取得できるようになると思いますが、これから確認です。
214
214
 
215
215
  ありがとうございます。
216
+
217
+
218
+
219
+ # 対策3:上記2次元での確認を進めていますがエラーが消せません。
220
+
221
+ サンプルでのロジックも上記&をつけるようエラーが出ました。
222
+
223
+ &をつけましたが、もう一件エラーがでます。
224
+
225
+ もし対応方法分かりましたらご教示ください。
226
+
227
+ <エラー内容>
228
+
229
+ test2.c:18:11: warning: incompatible pointer types passing 'int (*)[2][3]' to parameter of type 'int (*)[3]' [-Wincompatible-pointer-types]
230
+
231
+ print(p[i]);
232
+
233
+ test2.c:3:16: note: passing argument to parameter 'p' here
234
+
235
+ void print(int p[2][3]) {
236
+
237
+ <ソース>
238
+
239
+ #include <stdio.h>
240
+
241
+
242
+
243
+ void print(int p[2][3]) {
244
+
245
+ for(int i=0; i<2; i++)
246
+
247
+ for(int j=0; j<3; j++)
248
+
249
+ printf(" %d", p[i][j]);
250
+
251
+ printf("\n");
252
+
253
+ }
254
+
255
+ int main(void){
256
+
257
+ int A[2][3] = { {1,2,3}, {4,5,6} };
258
+
259
+ int B[2][3] = { {11,12,13}, {14,15,16} };
260
+
261
+ int C[2][3] = { {21,22,23}, {24,25,26} };
262
+
263
+ int D[2][3] = { {31,32,33}, {34,35,36} };
264
+
265
+
266
+
267
+ int (*p[])[2][3] = { &A, &B, &C, &D };
268
+
269
+
270
+
271
+ for(int i=3; i>=0; i--)
272
+
273
+ print(p[i]);
274
+
275
+ }

2

2件の対応でデータアクセスできるようになりました。2次元配列でアクセスする方法を確認しました

2021/10/22 07:10

投稿

fukuro
fukuro

スコア3

test CHANGED
File without changes
test CHANGED
@@ -175,3 +175,41 @@
175
175
  temperature_steam_f.c:8509:7: error: array type 'double *[301][179]' is not assignable
176
176
 
177
177
  ytble=ytable_p[zp];
178
+
179
+
180
+
181
+ # 対策2:「2次元配列をパラメータで渡すサンプル」で試した結果
182
+
183
+ fanaさんからの内容で1次配列でアクセスできるようになったので、jimboさんからの2次元でのアクセスの確認を行いました。
184
+
185
+ (ロジックの見易さから2次元にしたいので)
186
+
187
+ jimboさんからの本内容に従って修正して見ました。結果、コンパイルエラーが発生しましたが、一部変更することでエラーはなくなりました。確認はこれからですが状況を下記に記載します。
188
+
189
+ みなさん、ありがとうございます。
190
+
191
+ <修正>
192
+
193
+ double (*yp[])[tnum_z+1][xnum_w]={
194
+
195
+ ytble1,ytble2,ytble3,ytble4,ytble5,
196
+
197
+ ytble6,ytble7
198
+
199
+ };
200
+
201
+ <コンパイルエラー>
202
+
203
+ temperature_water_f.c:4114:2: warning: incompatible pointer types initializing 'double (*)[301][179]' with an expression of type 'double [301][179]'; take the address with & [-Wincompatible-pointer-types]
204
+
205
+ <対応>
206
+
207
+ 下記のように&をつけたところエラーがなくなりました。
208
+
209
+ &ytble1,&ytble2,&ytble3,&ytble4,&ytble5,&ytble6,&ytble7
210
+
211
+ <結果>
212
+
213
+ 結果はyp[i][j]で値を取得できるようになると思いますが、これから確認です。
214
+
215
+ ありがとうございます。

1

括弧を削除して見ました。改善されましたが、エラー1個の改修がわかりません。

2021/10/21 22:34

投稿

fukuro
fukuro

スコア3

test CHANGED
File without changes
test CHANGED
@@ -147,3 +147,31 @@
147
147
  # (5)/* */
148
148
 
149
149
  ytble=ytable_p[zp];
150
+
151
+
152
+
153
+
154
+
155
+ # 対策1:
156
+
157
+ 丸括弧は不要との助言から以下に訂正しました。
158
+
159
+ double *ytable_p[tnum_b]={
160
+
161
+ (double *)ytble1,(double *)ytble2,(double *)ytble3,(double *)ytble4,(double *)ytble5,
162
+
163
+ (double *)ytble6,(double *)ytble7,(double *)ytble8,(double *)ytble9,(double *)ytble10,
164
+
165
+ (double *)ytble11,(double *)ytble12,(double *)ytble13,(double *)ytble14
166
+
167
+ };
168
+
169
+ double *ytble[tnum_z+1][xnum_s];
170
+
171
+
172
+
173
+ 結果:エラーが1つになりました。但し、このエラーの改修方法がわかりません。
174
+
175
+ temperature_steam_f.c:8509:7: error: array type 'double *[301][179]' is not assignable
176
+
177
+ ytble=ytable_p[zp];