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

質問編集履歴

3

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

2021/10/22 07:11

投稿

fukuro
fukuro

スコア3

title CHANGED
File without changes
body CHANGED
@@ -105,4 +105,34 @@
105
105
  &ytble1,&ytble2,&ytble3,&ytble4,&ytble5,&ytble6,&ytble7
106
106
  <結果>
107
107
  結果はyp[i][j]で値を取得できるようになると思いますが、これから確認です。
108
- ありがとうございます。
108
+ ありがとうございます。
109
+
110
+ # 対策3:上記2次元での確認を進めていますがエラーが消せません。
111
+ サンプルでのロジックも上記&をつけるようエラーが出ました。
112
+ &をつけましたが、もう一件エラーがでます。
113
+ もし対応方法分かりましたらご教示ください。
114
+ <エラー内容>
115
+ test2.c:18:11: warning: incompatible pointer types passing 'int (*)[2][3]' to parameter of type 'int (*)[3]' [-Wincompatible-pointer-types]
116
+ print(p[i]);
117
+ test2.c:3:16: note: passing argument to parameter 'p' here
118
+ void print(int p[2][3]) {
119
+ <ソース>
120
+ #include <stdio.h>
121
+
122
+ void print(int p[2][3]) {
123
+ for(int i=0; i<2; i++)
124
+ for(int j=0; j<3; j++)
125
+ printf(" %d", p[i][j]);
126
+ printf("\n");
127
+ }
128
+ int main(void){
129
+ int A[2][3] = { {1,2,3}, {4,5,6} };
130
+ int B[2][3] = { {11,12,13}, {14,15,16} };
131
+ int C[2][3] = { {21,22,23}, {24,25,26} };
132
+ int D[2][3] = { {31,32,33}, {34,35,36} };
133
+
134
+ int (*p[])[2][3] = { &A, &B, &C, &D };
135
+
136
+ for(int i=3; i>=0; i--)
137
+ print(p[i]);
138
+ }

2

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

2021/10/22 07:10

投稿

fukuro
fukuro

スコア3

title CHANGED
File without changes
body CHANGED
@@ -86,4 +86,23 @@
86
86
 
87
87
  結果:エラーが1つになりました。但し、このエラーの改修方法がわかりません。
88
88
  temperature_steam_f.c:8509:7: error: array type 'double *[301][179]' is not assignable
89
- ytble=ytable_p[zp];
89
+ ytble=ytable_p[zp];
90
+
91
+ # 対策2:「2次元配列をパラメータで渡すサンプル」で試した結果
92
+ fanaさんからの内容で1次配列でアクセスできるようになったので、jimboさんからの2次元でのアクセスの確認を行いました。
93
+ (ロジックの見易さから2次元にしたいので)
94
+ jimboさんからの本内容に従って修正して見ました。結果、コンパイルエラーが発生しましたが、一部変更することでエラーはなくなりました。確認はこれからですが状況を下記に記載します。
95
+ みなさん、ありがとうございます。
96
+ <修正>
97
+ double (*yp[])[tnum_z+1][xnum_w]={
98
+ ytble1,ytble2,ytble3,ytble4,ytble5,
99
+ ytble6,ytble7
100
+ };
101
+ <コンパイルエラー>
102
+ 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]
103
+ <対応>
104
+ 下記のように&をつけたところエラーがなくなりました。
105
+ &ytble1,&ytble2,&ytble3,&ytble4,&ytble5,&ytble6,&ytble7
106
+ <結果>
107
+ 結果はyp[i][j]で値を取得できるようになると思いますが、これから確認です。
108
+ ありがとうございます。

1

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

2021/10/21 22:34

投稿

fukuro
fukuro

スコア3

title CHANGED
File without changes
body CHANGED
@@ -72,4 +72,18 @@
72
72
  zbias = zp * tnum_z;
73
73
 
74
74
  # (5)/* */
75
- ytble=ytable_p[zp];
75
+ ytble=ytable_p[zp];
76
+
77
+
78
+ # 対策1:
79
+ 丸括弧は不要との助言から以下に訂正しました。
80
+ double *ytable_p[tnum_b]={
81
+ (double *)ytble1,(double *)ytble2,(double *)ytble3,(double *)ytble4,(double *)ytble5,
82
+ (double *)ytble6,(double *)ytble7,(double *)ytble8,(double *)ytble9,(double *)ytble10,
83
+ (double *)ytble11,(double *)ytble12,(double *)ytble13,(double *)ytble14
84
+ };
85
+ double *ytble[tnum_z+1][xnum_s];
86
+
87
+ 結果:エラーが1つになりました。但し、このエラーの改修方法がわかりません。
88
+ temperature_steam_f.c:8509:7: error: array type 'double *[301][179]' is not assignable
89
+ ytble=ytable_p[zp];