int (*ip)[4]
C++和int ip[4]
C++之间有什么区别吗?
问问题
173 次
2 回答
4
int (*ip)[4]
C++和int ip[4]
C++之间有什么区别吗?
是的,int (*a)[4]
是一个指向 4 个整数数组的指针,而int b[4]
是一个 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
}
另一个区别是您可以将指向数组的指针作为参数传递给函数,而无需进行数组到指针的转换。
void f( int (*array)[5] ); // must have a size of 5
int main()
{
int a[10],
b[5];
f(&a); // NO
f(&b); // Okay
}
您可以通过使用对数组的引用来避免传递地址。它与普通引用具有相同的语义,因此您可以在签名中简单地替换*
为 with 。&
而你会改为f(a)
and f(b)
。
于 2013-04-07T01:46:17.177 回答
0
int (*ip)[4]
with之间的区别与 say和int ip[4]
之间的区别相同。一般来说,它与任何类型之间的区别相同。即前者声明了某种类型的对象,而后者声明了一个指向该类型对象的指针。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 回答