これを試すと、添え字コンパイラ エラーが発生します。
int **arrays;
// allocate and initialize it....
int pos1 = 0;
int pos2 = 1;
int value = (*arrays[pos1])[pos2];
かっこ内の部分がint*
ポインタへの逆参照である場合、配列アクセスが正当でないのはなぜですか?
これを試すと、添え字コンパイラ エラーが発生します。
int **arrays;
// allocate and initialize it....
int pos1 = 0;
int pos2 = 1;
int value = (*arrays[pos1])[pos2];
かっこ内の部分がint*
ポインタへの逆参照である場合、配列アクセスが正当でないのはなぜですか?
括弧内はint
. まず、arrays[pos1]
ポインター ( ) を生成し、それを (前置演算子int*
を介して) 逆参照します。*
したがって、(*arrays[pos1])
単純なint
であり、ポインターではありません。
目的が多次元配列内の位置にアクセスすることだけである場合は、を忘れて*
次を使用してください。
arrays[pos1][pos2]
問題は次の行にあります。
int value = (*arrays[pos1])[pos2];
あなたは を持ってint **
います 、それを にします 、それを実行arrays[pos1]
するint *
ことでさらに逆参照している*arrays[pos1]
ため、 を実行すると、エラーが発生するのは and(*arrays[pos1])[pos2]
で(*arrays[pos1])
はint
ありません。int*
あなたはただすることができます
int value = arrays[pos1][pos2];
値 (勾配) を入れてから合計線をトレースする方法。配列を動作させるには、括弧を使用した実際の演習です。ヒラルキーな順序かもしれません。であること
演算結果記号 [ ][ ] を含む、構造記号 { } を持つ FOR ループ。配列 Display を生成するのは FOR ループです。
まともなセットアップまたは完全な意味不明なものを得るために、マージンは比較的小さいです。目的は、情報を 2D 配列に格納することです。そこに新しい情報を入れて、後でその情報スロットにアクセスします。私はそれを楽しんで、ロジックビーストがどのように反応するかを見ようとしています. 1000時間のトレーニングの範囲で、あなたはそれの感覚をつかむべきだと言われています:)
#include <stdio.h>
int main()
//2D_Array. Multilist. Sumline and Total Sum .
//Select each coordinate by pressing ENTER after each number .
//KHO2016.no7. mingw (TDM-GCC-32) . c-ansi .
{
//declare, valuate
int a,b,c=1,d=1,i,j,k,l,sum0=0;
int ar_a[20][20];
//calculate
jump0:
for (l=0;l<1;l++) // vary the value l<1 - l<10
{printf ("M.M.M Shelf %d\n",l); // SHELF2
for (k=0;k<1;k++) // SHELF1
{printf ("SumLine%d = %d\n",k,sum0);
{for (i=1;i<6;i++) // COLUMS .
for (j=0;j<1;j++) // LINES . per COLUM
{ar_a[i][j]=d*c++; // put value into 2D_array indevidual result slot.
sum0=sum0+(ar_a[i][j]);
printf ("%d%d(%.2d*%.2d=%.3d)\t",i,j,d,c-1,ar_a[i][j]);}}}}
printf ("TOTAL SUM = %d . Select 2 coordinates [1-5] enter, [0] enter: \n",sum0);
scanf ("%d%d",&a,&b);
printf ("You selected : %d and %d . Result value = %d\n",a,b,ar_a[a][b]);
goto jump0;
//terminate
return 0;
}