2013-11-02 46 views

回答

3

是的。

void fun(int *tab){} 
void fun(int tab[]){} 
void fun(int tab[10]){} //whatever the size is 

都與編譯器相同。數組大小與否,在作爲函數參數傳遞時衰減爲指針。

在實踐中,避免使用最後一個,因爲它可能暗示大小是函數已知的,而事實上並非如此。

+0

這使得它對一個新手程序員來說是一些最具誤導性的語法糖... – StoryTeller

+0

有趣,很高興知道! – nullpointer

+0

@YuHao:在我接受你的答案之前,還有一個問題;)爲什麼我會寫最後一個,我的意思是:'void fun(int tab [10]){}' - 這是什麼意思?這究竟意味着什麼? – nullpointer

2

是的,不,第二個版本不會讓你找出函數內數組的大小。它仍然衰減到一個指針。 :)

+1

我怎樣才能找出第一個版本的數組大小? – nullpointer

+0

@nullpointer,你不能。使用'std :: array'或'std :: vector'什麼的。 – chris

+0

@nullpointer直接你不能。使用'std :: vector',將大小作爲參數傳遞,或用特殊值標記最後一個元素。 –

1

是的,它是一樣的。無論何時你聲明一個數組在你的程序中聲明int tab [],並且如果你想將該數組傳遞給其他函數,那麼你實際上傳遞了該數組的基地址位置,即& tab [0],它是你在函數中用作參數的指針,int * tab ...實際上是通過引用調用的。

相關問題