-5

C++ でint (*ip)[4]との間に違いはありますか?int ip[4]

4

2 に答える 2

4

C++ でint (*ip)[4]との間に違いはありますか?int ip[4]

はい、int (*a)[4]は 4 つの整数の配列へのポインタですが、 は 4 つの整数int b[4]の配列です。aは配列ではなく、単なるポインタであることに注意してください。次に例を示します。

int main()
{
    int a[5] = {2, 3, 6, 8, 10};
    int (*b)[5] = &a; // assign the address of the array to the pointer

    b[2] = 4; // dereferences the pointer and assigns a[2] to 4
}

もう 1 つの違いは、配列からポインターへの変換を行うことなく、配列へのポインターをパラメーターとして関数に渡すことができることです。

void f( int (*array)[5] ); // must have a size of 5

int main()
{
    int a[10],
        b[5];

    f(&a); // NO
    f(&b); // Okay
}

配列への参照を使用することで、アドレスの受け渡しを回避できます。これは通常の参照と同じセマンティクスを持っているため、署名内で*単純に置き換えることができます。&そして、代わりにf(a)andを実行しf(b)ます。

于 2013-04-07T01:46:17.177 に答える
0

int (*ip)[4]withの違いは、たとえば、とint ip[4]の違いと同じです。そして、一般的には、とfor any typeの違いと同じです。つまり、前者はある型のオブジェクトを宣言し、後者は型のオブジェクトへのポインタを宣言します。int iint *iT tT *tTTT

構文からは明らかではありませんが、そうです。さらに説明すると、これらの元の宣言は

int (*ip1)[4];
int ip2[4];

次のシーケンスに置き換えることができます

typedef int FourIntsArray[4];

FourIntsArray *ip1; // <- same as `int (*ip1)[4]`
FourIntsArray ip2;  // <- same as `int ip2[4]`

後者の宣言は、元の宣言とまったく同じです。

于 2013-04-07T02:10:12.167 に答える