#include <iostream> using namespace std; //get a length of the array //=======================可以结果正确的结果 :6 ================ template <typename elemtype> int getLength(elemtype &array) { int one =sizeof(array[0]);//单位元素的长度 // cout<<endl<<"单位元素的长度"<<one; int length =sizeof(array)/one; return length; } void main() { int array[6] = {1,2,3,4,5,6}; int length =getLength(array); char charArray[6]={'1','2','3','4','5','6'}; int charArrayLength =getLength(charArray); cout<<"数组长度为"<<length<<endl; cout<<"char array length is "<<charArrayLength<<endl; } //================================================================ /* //===================输出错误的结果: 1 =============================== template <typename elemtype> int getLength(elemtype *array) { int one =sizeof(array[0]);//单位元素的长度 // cout<<endl<<"单位元素的长度"<<one; int length =sizeof(array)/one; return length; } void main() { int array[6] = {1,2,3,4,5,6}; int length =getLength(array); cout<<"数组长度为"<<length<<endl; }*/ //====================================================================== //=========================原因说明===================================== /* sizeof(指针) 永远返回是4或8(在32位机上是4,在64位机上是8), 它返回的是指针指向的地址,既然是地址就是定值。sizeof()也可以返回结构体, 嵌套结构体,对象,嵌套对象等等的复杂类型,但是会涉及到字节对齐、偏移量等问题, 不利于查错,所以尽量不要用它处理复杂类型。只要记住指针的情况就行了,因为大家 经常犯这样的错误。 */