获取数组长度
直接看代码吧
要注意的是函数传入数组的时候会当成一个指针看待,所以输出结果不正常,但是使用类模板则可以成功获取长度,在main()函数中直接写也可以成功获取
#include<iostream>
using namespace std;
int getlen(int a[]);
//使用类模板
template <class T>
int getArrayLen(T& array)
{
return (sizeof(array) / sizeof(array[0]));
}
int main(){
int a[]={1,2,3,4,5,6};
cout<<getlen(a)<<endl;
cout<<"--------"<<endl;
cout<<(sizeof(a)/sizeof(a[0]))<<endl;//成功
cout<<"--------"<<endl;
cout<<getArrayLen(a)<<endl;
cout<<"--------"<<endl;
int *b=new int[3];
for(int i=0;i<3;i++)
{
b[i]=i*10;
}
cout<<getlen(b)<<endl;//使用动态数组仍失败
delete []b;
char c[]={'a','b','c'};
cout<<"--------"<<endl;
//字符数组成功
cout<<(sizeof(c)/sizeof(c[0]))<<endl;
cout<<"--------"<<endl;
cout<<getArrayLen(c)<<endl;
}
int getlen(int a[])
{
cout<<sizeof(a)<<endl;
cout<<sizeof(a[0])<<endl;
return (sizeof(a)/sizeof(a[0]));
//函数传入数组的时候会当成一个指针看待,所以输出结果不正常
}
运行结果如下
获取字符串长度
sizeof()
(转载自c++中sizeof()运算符的用法)
1. 定义
sizeof是一个操作符(operator)。
其作用是返回一个对象或类型所占的内存字节数。
- 语法
sizeof有三种语法形式:
1) sizeof (object); //sizeof (对象)
2) sizeof object; //sizeof 对象
3) sizeof (type_name); //sizeof (类型)
对象可以是各种类型的变量,以及表达式(一般sizeof不会对表达式进行计算)。
sizeof对对象求内存大小,最终都是转换为对对象的数据类型进行求值。
sizeof (表达式); //值为表达式的最终结果的数据类型的大小
strlen()
strlen(…)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。
当数组名作为参数传入时,实际上数组就退化成指针了。
它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符’\0’。返回的长度大小不包括’\0’。
length()
返回字符串长度
下面是代码
#include<iostream>
using namespace std;
int main(){
string x1="abc";
string x2="abcdef";
string x3="bcdefhij";
char y1[]="abcde";
cout<<sizeof(x1)<<endl;//返回字符串长度
cout<<x1.length()<<endl;
cout<<x1.size()<<endl;
cout<<"---------"<<endl;
cout<<sizeof(x2)<<endl;
cout<<x2.length()<<endl;
cout<<x2.size()<<endl;
cout<<"---------"<<endl;
cout<<sizeof(x3)<<endl;
cout<<x3.length()<<endl;
cout<<x3.size()<<endl;
cout<<"---------"<<endl;
cout<<strlen(y1)<<endl;
}