2013-04-07 115 views
-4

C++中的int (*ip)[4]int ip[4]之間是否有區別?int(* ip)[4]與int ip [4]之間的區別?

+0

你有沒有嘗試過看看自己? – chris 2013-04-07 01:42:15

+0

查找有關C和C++聲明的類似問題。 – 2013-04-07 01:42:29

+0

不是,它不是int * ip [4]但是int(* ip)[4] – jiafu 2013-04-07 01:45:52

回答

4

C++中的int (*ip)[4]int ip[4]之間有什麼區別嗎?

是,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 
} 

可以避免使用到陣列的參考傳遞地址。它具有與正常參考相同的語義,因此您可以簡單地將*替換爲簽名中的&。而你會做f(a)f(b)

0

int (*ip)[4]int ip[4]之間的差異與例如int iint *i之間的差異相同。一般而言,對於任何類型的T,它與T tT *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]` 

後者聲明是完全等同於原來的聲明所取代。

相關問題