length()、size()、sizeof()三者的区别
一、length()函数
c++中,length()只是用来获取字符串的长度。 例如:string str = “asdfghjkl” 则,str.length() = 9。
二、size()函数
c++中,在获取字符串长度时,size()函数与length()函数作用相同。 除此之外,size()函数还可以获取vector类型的长度。 例如:vector < int> num(15,2) 则,num.size() = 15。
三、sizeof()运算符
sizeof()运算符用来求对象所占内存空间的大小。
3.1 获取基本类型的大小 在windows64系统环境下,各种基本类型的大小如下: sizeof(char)=1 , sizeof(int)=4 , sizeof(long)=8 , sizeof(float)=4 , sizeof(double)=8 , sizeof(string)=28。
除此之外,64位编译器下指针型的长度为8(32位为4),即: sizeof(int*) = sizeof(float*) = sizeof(char*) = 8。
常量值及变量值的长度,等同于它的实际类型长度的: sizeof(2)=4 , sizeof(3.14)=8。 (不定义类型的情况下,计算机默认3.14为double类型)
3.2 求取数组所占内存空间大小 Example:
char c[] = "asdsds"; char* cc = c; char cn[40] = "asdsds"; int a[] = {1,2,3,4,5,6}; int* aa = a; cout << sizeof(c) << sizeof(cc) << sizeof(*cc) << sizeof(cn); cout << sizeof(a) << sizeof(aa) << sizeof(*aa);
Output:
sizeof(c) = 7 //c是数组,计算到 位置,结果为6*1+1=7 sizeof(cc) = 8 //cc为指针类型,大小为8 sizeof(*cc) = 1 //*cc指向c的第一个字符,大小为1 sizeof(cn) = 40 //开辟40个char空间,大小为40*1=40 sizeof(a) = 24 //a是数组,但不需计算到 ,结果为6*4=24 sizeof(aa) = 8 //aa为指针类型,大小为8 sizeof(*aa) = 4 //*aa指向a的第一个数字,大小为4
3.3 获取数组长度 Example:
int array[] = {6,5,4,3,2,1}; int length1 = sizeof(array)/sizeof(array[0]); int length2 = sizeof(array)/sizeof(*array); int length3 = sizeof(array)/sizeof(int); cout << length1 << length2 << length3;
Output:
length1 = 6 length2 = 6 length3 = 6
值得一提的是,若将第一行代码改为:int array[10] = {6,5,4,3,2,1}; 则,length1、length2、length3的长度都将变为10。 (即未赋值的空余部分仍旧算在内,小伙伴要小心哦!)