sizeof()、size()、length()、strlen()的用法

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计算过了是类型或是变量的长度。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值