c++MFC 数组做参数
自己定义一个函数voidCInspectView::AddListControl(tag_Almm_tagAlm,CStringstrDisLast[],intnPlcI...
自己定义一个函数void CInspectView::AddListControl(tag_Alm m_tagAlm,CString strDisLast[],int nPlcIndex),函数中有一个数组参数,这个参数该怎么写,还有在调用这个函数时,这个数组参数该怎么传求指导
展开
1个回答
展开全部
数组在传参数时自动退化成指针,并且数组大小不再有意义。
所以对于一位数组只需要定义对应的指针参数即可,但无法得到数组大小,可以通过定义全局量或者传递数组大小使函数获取其大小。
如 Type TypeArray[10];
可定义的函数参数为
ReturnType FunctionName(Type* pType , size_t size/*other arguments*/ );
或者 ReturnType FunctionName(Type TypeArray[] , size_t size/*other arguments*/ );
或者 ReturnType FunctionName(Type TypeArray[1] , size_t size/*other arguments*/ );
上面这些形式等价,即使形参列表中定义的数组有大小,但并无意义,编译器不会理会。
如果是引用,必须为
ReturnType FunctionName(Type (&TypeArray)[10]/*other arguments*/ );
对于二位数组,编译器需要知道第二维的大小,
Type TypeArray[10][10];
可定义的函数参数为
ReturnType FunctionName(Type (*pType)[10] , size_t size /*other argument*/);
或者 ReturnType FunctionName(Type TypeArray[][10] , size_t size/*other arguments*/ );
或者 ReturnType FunctionName(Type TypeArray[1][10] , size_t size/*other arguments*/ );
注意下面的形式是错误的:
ReturnType FunctionName(Type** pType , size_t size/*other arguments*/);
ReturnType FunctionName(Type* pType[10] , size_t size/*other arguments*/ );
这两种形式的参数编译后都是Type**类型
同样引用必须为
ReturnType FunctionName(Type (&TypeArray)[10][10]/*other arguments*/);
对于三维或者更高维数组高于第一维的大小必须指定,
如果对一位数组名取地址,形参需要按照二维处理,二维取地址按三维,其他类推。
所以对于一位数组只需要定义对应的指针参数即可,但无法得到数组大小,可以通过定义全局量或者传递数组大小使函数获取其大小。
如 Type TypeArray[10];
可定义的函数参数为
ReturnType FunctionName(Type* pType , size_t size/*other arguments*/ );
或者 ReturnType FunctionName(Type TypeArray[] , size_t size/*other arguments*/ );
或者 ReturnType FunctionName(Type TypeArray[1] , size_t size/*other arguments*/ );
上面这些形式等价,即使形参列表中定义的数组有大小,但并无意义,编译器不会理会。
如果是引用,必须为
ReturnType FunctionName(Type (&TypeArray)[10]/*other arguments*/ );
对于二位数组,编译器需要知道第二维的大小,
Type TypeArray[10][10];
可定义的函数参数为
ReturnType FunctionName(Type (*pType)[10] , size_t size /*other argument*/);
或者 ReturnType FunctionName(Type TypeArray[][10] , size_t size/*other arguments*/ );
或者 ReturnType FunctionName(Type TypeArray[1][10] , size_t size/*other arguments*/ );
注意下面的形式是错误的:
ReturnType FunctionName(Type** pType , size_t size/*other arguments*/);
ReturnType FunctionName(Type* pType[10] , size_t size/*other arguments*/ );
这两种形式的参数编译后都是Type**类型
同样引用必须为
ReturnType FunctionName(Type (&TypeArray)[10][10]/*other arguments*/);
对于三维或者更高维数组高于第一维的大小必须指定,
如果对一位数组名取地址,形参需要按照二维处理,二维取地址按三维,其他类推。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询