1.sizeof()
sizeof()用于返回括号中的对象在内存中分配的大小,如:
sizeof(char)=1; //char型分配一个字节大小的内存
sizeof(int)=4; //int型分配四个字节大小的内存(因编译系统而异,32位系统下是4,64位系统下是8)
sizeof(double)=8; //double型分配八个字节大小的内存
sizeof有三种语法形式:
1) sizeof (object); //sizeof (对象)
2) sizeof object; //sizeof 对象
3) sizeof (type_name); //sizeof (类型)
也就是说,他的对象不仅仅可以是标准数据类型,也可以是数组、结构体、类对象、指针等,例如:
int *p=new int[8];
int t=sizeof(p); //t的值为4 或 8,依系统而定。
sizeof对对象求内存大小,最终都是转换为对对象的数据类型进行求值。对于结构体则涉及到字节对齐。
int i;
int a[10];
string s = "China";
sruct test{
int i;
char x;
};
sizeof(int); //值为4
sizeof(i); //值为4,等价于sizeof(int)
sizeof(a); //返回值是40
sizeof(s); //值为28
sizeof(test); //值为8
如果是函数:
void Func(char str_arg[100])
{
printf("%d\n",sizeof(str_arg));
}
int main(void)
{
char str[]="Hello";
Func(str);
}
运行结果:
100
更详细的sizeof()用法见https://www.cnblogs.com/minmin123/p/11940208.html
2.size()
size()函数是用于计算string对象长度的一个成员函数,它包含在STL中,如下所示:
string s="I love you";
int t=s.size(); //t的值为10
size()也可返回vector、map对象的长度。
注意的是,size()的返回值是unsigned类型的,所以不能和负数比较大小。
#include<iostream>
using namespace std;
int main()
{
unsigned a;
a = 2;
if (-1 > a) cout << -1;
else cout << 1;
}
输出的结果是-1。
unsigned类型跟负数比较大小,会先将有符号数转换为无符号数再比较大小,会无法预估大小
3.length()
length()函数的使用与size()函数并无区别
4.strlen()
strlen返回字符数组中有效元素的个数,而不是字符数组的容量。(返回的类型也是unsigned)
char c[20];
string s="1234 ";
strcpy(c,s.c_str());
cout<<strlen(c); //值为5
strlen以‘\0’为结束标志,不包括‘\0’在内
char aa[10];cout<<strlen(aa)<<endl; //结果是不定的
char aa[10]={'\0'}; cout<<strlen(aa)<<endl; //结果为0
strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,sizeof则是计算类型占内存的大小,大部分编译程序在编译的时候就把sizeof计算过了是类型或是变量的长度。