1、当数组名作为函数的参数传入时,该参数的sizeof应该等于多少呢?
记得刚毕业的那会,经常会遇到这样的笔试题:当数组名作为函数的参数传入时,该参数的sizeof应该等于多少呢?即定义了一定长数组,然后将该数组名作为一个参数调用了一个函数,在该被调用的函数中,对该参数进行sizeof操作,如下所示:
[cpp]
view plain
copy
- TCHAR achTest[MAX_PATH] = { 0 };
- int nArrSize = sizeof( achTest ); // 此时的sizeof应该等于:MAX_PATH*sizeof(TCHAR)
- ......
- TestFun( achTest ); // 此处调用了TestFun函数
- ......
- void TestFun( TCHAR* pszBuf )
- {
- int nSize = sizeof( pszBuf ); // 虽然传进来的是数组名,但是此处实际上是一个指针,即sizeof等于4
- ......
- }
2、直接将函数中的局部变量out出来供外部使用
如果是个整型变量,则没什么问题。如果是个类的对象的话,并且作为返回值返回,则会构造一个临时对象,将执行拷贝构造操作,但要保证不涉及到深拷贝,这样也是没问题的。但是如果作为引用或指针,指向的内存可能是在被调用的函数中定义的,比如字符型数组,在函数执行完后内存就被释放了,在函数外部再访问就会出错了。在代码量比较多的时候,可能很难一眼看出来这样的问题,当如果出问题后稍微仔细分析一下就能找到原因,所以遇到类似的情况要慎重一些。