如題目標題。當我寫:void fun(int *tab){}
是否寫作void fun(int tab[]){}
?寫作void fun(int * tab);和void fun(int tab [])是一樣的嗎?
回答
是的。
void fun(int *tab){}
void fun(int tab[]){}
void fun(int tab[10]){} //whatever the size is
都與編譯器相同。數組大小與否,在作爲函數參數傳遞時衰減爲指針。
在實踐中,避免使用最後一個,因爲它可能暗示大小是函數已知的,而事實上並非如此。
這使得它對一個新手程序員來說是一些最具誤導性的語法糖... – StoryTeller
有趣,很高興知道! – nullpointer
@YuHao:在我接受你的答案之前,還有一個問題;)爲什麼我會寫最後一個,我的意思是:'void fun(int tab [10]){}' - 這是什麼意思?這究竟意味着什麼? – nullpointer
是的,不,第二個版本不會讓你找出函數內數組的大小。它仍然衰減到一個指針。 :)
我怎樣才能找出第一個版本的數組大小? – nullpointer
@nullpointer,你不能。使用'std :: array'或'std :: vector'什麼的。 – chris
@nullpointer直接你不能。使用'std :: vector',將大小作爲參數傳遞,或用特殊值標記最後一個元素。 –
是的,它是一樣的。無論何時你聲明一個數組在你的程序中聲明int tab [],並且如果你想將該數組傳遞給其他函數,那麼你實際上傳遞了該數組的基地址位置,即& tab [0],它是你在函數中用作參數的指針,int * tab ...實際上是通過引用調用的。
- 1. void(int)&void(*)(int)
- 2. 'void(*)(int)'與'void(^)(int)'相同嗎?
- 3. void(int)和void(*)(int)有什麼區別?
- 4. 可以用std :: bind1st將void(*)(void *,int)轉換爲void(*)(int)嗎?
- 5. public void add(int a,int ... b){
- 6. NoSuchMethodError void vs int
- 7. Void vs Int函數
- 8. 'void(* old_sigint_handler)(int)'是什麼?
- 9. Void and cout vs int
- 10. int main()和void main()如何工作
- 11. sigaction:使用「void(* sa_sigaction)(int,siginfo_t *,void *);」
- 12. 什麼是qsort void * x和*(int *)x?
- 13. 從不兼容類型'void(Button :: *)(int)'分配給'void(*)(int)'
- 14. decltype(*&fun)很奇怪嗎?
- 15. int main(void)在C++中有效嗎?
- 16. int main(void)給出錯誤
- 17. 將int轉換爲void *和void *爲int,用於TMemoryStream-> WriteBuffer(C++ Builder XE7)
- 18. C:從void *讀取int ** *
- 19. 「typedef void(* __ handler)(int)」的含義是什麼?
- 20. PyQt4 QTabWidget TAB CHANGE .... currentChange(int)不起作用
- 21. void main和int之間的區別主
- 22. C++和box2d:userdata將int轉換爲void *
- 23. 「void f(int(*)[7]){}」是什麼意思?
- 24. typedef int function(void *)是什麼意思?
- 25. int main()和int main(void)之間的區別?
- 26. 無法將參數1從'int(__thiscall A :: * *)(void)'轉換爲'int(__cdecl *)(void)'
- 27. winnt.h中大寫VOID宏和INT的typedef的用途
- 28. foo({1,2})如何爲「void foo(對<int,int>)」工作
- 29. 無法理解此功能extern void _setvect1(int vector,_Interrupt1 void(* target)());
- 30. 爲什麼fun(int i)中的printf語句沒有執行?
如果你沒有在'[]'中計算多餘的字符。 .. – jrok
@jrok:你是什麼意思?什麼'額外的字符'? – nullpointer
'*'是一個字符,'[]'是兩個... – StoryTeller