(转)C/C++ 数组 参数 !
时间:2010-09-25 来源:阿4is痞男
//由于数组的元素个数默认情况下是不作为实参内容传入调用函数的,本程序用来讨论有此带来的
一般情况下,作为函数实参的数组都是将数组地址(数组名)转换成指向第一元素的指针传递给形参的。所以,如果需要同时传递数组大小,需要另外作为参数传递。这点与C函数相同。
但在C++中可以通过引用的方式同时传递数组首址及大小,示例如下:
此时调用func必须用有10个int元素的数组调用,否则会有编译错误。这就限制了该函数的使用范围。注意:上面例子中的形参是int (&arr)[10],这里的括号不能少,否则若是int &arr[10]就表示arr是一个有10个int引用类型元素的数组。 如果要使函数能在传递数组时同时传递其大小,并且可以针对不同大小的数组,可以使用函数模板来完成这项工作,例如:
在这里运用了模板的非类型模板参数来传递数组大小,可以针对各种大小的数组。在编译时,编译器根据实参数组的大小来确定N值,从而可以让这个函数适用于各种大小的数组。编译后,对于不同的大小的数组会实例化相应的函数类型(实质上相当于对不同大小的数组进行函数重载,只是这枯燥的工作让编译器代做了)。 ------------------------------------------------------------------------------
C++ 通过成员函数参数返回成员数组的值 class A { public : A {} ~ A {} enum { MAX_VAL_COUNT = 10; }; void getArraryValues(int (* pVal)[MAX_VAL_COUNT]) { memcpy(pVal,m_aVal,MAX_VAL_COUNT); } 或 void getArraryValues(int (& eVal)[MAX_VAL_COUNT]) { memcpy(&eVal,m_aVal,MAX_VAL_COUNT); } 或 void getArraryValues(const int* & eVal)) { eval = static_cast<int *>(m_aVal); } private : int m_aVal[MAX_VAL_COUNT] }
(当然这里类用户还是可以通过显式类型转换修改类私有成员)。 尽管如此,在C++中还是最好使用vector代替数组 #include <vector> using namespace std; class A { public : A {} ~ A {} enum { MAX_VAL_COUNT = 10; }; void getArraryValues(vector& vVal) { vVal = m_vVal }
vector<int> m_vVal[MAX_VAL_COUNT] } -----------------------------------------------------------------------------------------------------------------------------------
/*程序作者:管宁 |
Copyright 2006-2020 (phpxiu.com) All Rights Reserved.
本站为非盈利性网站,不接受任何广告。php爱好者