C++ でint (*ip)[4]
との間に違いはありますか?int ip[4]
質問する
173 次
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 i
int *i
T t
T *t
T
T
T
構文からは明らかではありませんが、そうです。さらに説明すると、これらの元の宣言は
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 に答える