[閒聊] passing array to function
考慮利用一 function 列印 array 內的元素
通常會用以下的方法 ( passing array as pointer )
=================================================
void fun(int* a,int size)
{
for(int i=0;i<size;i++)
cout << a[i] << " ";
cout << endl;
}
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
fun( a, 10 );
return 0;
}
=================================================
此方法呼叫的時候,需給 array pointer 以及 array size
有個神奇的用法,利用 reference to array 的方式 (passing array as array)
=================================================
void fun( int (&a)[10] ) // a reference to an array of 10 ints
{
for(int i=0;i<10;i++)
cout << a[i] << " ";
cout << endl;
}
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
fun( a );
return 0;
}
=================================================
此方法只需要傳入一個變數。但是這樣的話 void fun( int (&a)[10] ) 只能對 array
大小等於 10 的陣列處理。
若是結合 template,則對任意 size 都有個對應之 fun 來處理
=================================================
template<int size>
void fun( int (&a)[size] ) // a reference to an array of "size" ints
{
for(int i=0;i<size;i++)
cout << a[i] << " ";
cout << endl;
}
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
fun( a );
return 0;
}
=================================================
有個有趣的問題是,若是我想傳 a[8]~a[10] 當作 array 傳給 fun 該如何處理?
法一: passing array as pointer
利用 pointer 的方法很簡單,只要傳入 fun( a+8 , 3 ) 即可。
法二: passing array as array
=================================================
template<int size>
void fun( int (&a)[size] ) // a reference to an array of "size" ints
{
for(int i=0;i<size;i++)
cout << a[i] << " ";
cout << endl;
}
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int* z = static_cast<int*>(a); //轉成 pointer
z+=8; //指到a[8]
fun ( reinterpret_cast<int(&)[3]>(*z));//轉成reference to an array of 3 ints
fun( a );
return 0;
}
=================================================
此方法不是很容易了解,我是試了蠻多次才試出來的,像是
reinterpret_cast<int(&)[3]>(*z) 中
為何要用 *z 而不是 z ,就不是很了解。
以前傳陣列都是用 pointer 的方法在傳,提供另外種方法給大家參考。
請指教
Have FUN!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.97.179
※ 編輯: spider391 來自: 220.132.97.179 (04/22 17:10)
推
04/22 17:43, , 1F
04/22 17:43, 1F
推
04/22 18:08, , 2F
04/22 18:08, 2F
→
04/22 21:53, , 3F
04/22 21:53, 3F
→
04/22 22:02, , 4F
04/22 22:02, 4F
→
04/23 00:13, , 5F
04/23 00:13, 5F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章