2

Visual C++ の初心者向けの本を購入し、配列、文​​字列、およびポインターに関する章に到達しました。概念は理解できましたが、多次元配列となると少し迷いました。

配列とポインターの宣言:

double beans[3][4];
double* pbeans;

私はこの部分を理解しました:

*次のように、ポインター pbeans に値を宣言して割り当てることができます。

double* pbeans;
pbeans = &beans[0][0];

しかし、著者が次のステートメントを入力して最初の行/次元のアドレスを割り当てることができると提示したとき、彼は私を失いました:

pbeans = beans[0];

ここで「Address-Of」演算子をスキップできるのはなぜですか? 私にとって論理的なことは次のとおりです。

pbeans = &beans[0];
4

3 に答える 3

0

配列だけがあるとします

double legumes[5];

配列はポインターに減衰するため、次のことができます

double* plegumes = legumes;

2 次元配列を宣言すると、配列の配列が作成されます。したがって、式beans[0]は実際には配列を参照します。だから声明は

pbeans = beans[0];

配列をポインターに割り当てるだけです。

于 2012-12-10T22:58:19.163 に答える
0

配列は最初の要素へのポインターに減衰するためです。という配列がある場合、配列が収まらない場所で をarr使用すると、通常はポインターとして扱われます。これは崩壊と呼ばれます。arrarr

この場合、beans[0]は配列です。具体的には、double[4]. ただし、配列をポインターに割り当てることはできないため、配列は崩壊してdouble*.

あなたが提供したコードはdouble* pbeans = &beans[0];、doubleの配列へのポインターをdoubleへのポインターに割り当てようとしています。タイプの不一致により機能しません。

また、それはさておき、これはあまり良い本のようには思えません。配列、文字列、ポインタを一緒に教えることは C のにおいがします。

于 2012-12-10T22:59:09.317 に答える
0

配列型と配列の最初の要素へのポインターとの間の標準的な変換があります。より簡単な例として:

int array[5];
int* p = array;

pは、 の最初の要素へのポインターになりましたarray。これは、「5 int の配列」型のオブジェクトは、必要に応じて「へのポインター」に減衰するためです。int

あなたの場合、beans[0]タイプは「4倍精度の配列」であり、配列の最初の要素を指す「倍精度へのポインタ」に崩壊しますbeans[0]。するのと同じdouble* p = &beans[0][0]です。

于 2012-12-10T23:00:56.527 に答える