質問編集履歴
3
2次元配列をパラメータで渡す(対策2)を試しましたがエラーが消せません。対策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次元配列でアクセスする方法を確認しました
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個の改修がわかりません。
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];
|