博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sizeof、strlen
阅读量:5917 次
发布时间:2019-06-19

本文共 1237 字,大约阅读时间需要 4 分钟。

一、sizeof

        sizeof(...)是运算符,sizeof操作符的结果类型是size_t。它在头文件里typedef为unsigned int类型。是以字节为单位进行计数的。所以位域成员不

能用sizeof进行计算。參数能够是数组、指针、类型、对象、函数等。

       功能是:获得保证能容纳实现所建立的最大对象的字节大小。

       因为在编译时计算。因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的

空间,返回值跟对象、结构、数组所存储的内容没有关系。

        详细而言,当參数分别例如以下时,sizeof返回的值表示的含义例如以下:

数组——编译时分配的数组空间大小。

指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4 字节byte);

类型——该类型所占的空间大小。

对象——对象的实际占用空间大小。

函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。

比如:

char a[] = "hello world";

char *p = a;
cout<< sizeof(a) << endl; // 12 字节
cout<< sizeof(p) << endl; // 4 字节

注意当数组作为函数的參数进行传递时。该数组自己主动退化为同类型的指针。

void Func(char a[100])
{
cout<< sizeof(a) << endl; // 4 字节而不是 100 字节
}

二、strlen

头文件:string.h

函数: int strlen(char *s);

格式:strlen (字符数组名、指针。且必须是以'\0'结尾的

功能:计算字符串s的(unsigned int型)长度,不包含'\0'在内。

比如:

int ac[10];

cout<<sizeof(ac)<<endl;(结果是40  byte)

cout<<strlen(ac)<<endl; (ac相当于一个指针,可是strlen仅仅能接受char*类型,所以编译时出错)

char aa[10]={'\0'}; 

cout<<strlen(aa)<<endl; //结果为0

class X{ int i; int j; char k;};X x;

cout<<sizeof(X)<<endl; 结果 12 ===》内存补齐

cout<<sizeof(x)<<endl; 结果 12 同上

char szPath[MAX_PATH]

假设在函数内这样定义。那么sizeof(szPath)将会是MAX_PATH,可是将szPath作为函数參数时。sizeof(szPath)却会是4(指针大小)

char ca1[] = {‘C’。'++' };

char ca2[] = {‘C’,'++' ,‘\0’};

          故strlen(ca1)的值没有定义。而strlen(ca2)=2。

转载地址:http://isfvx.baihongyu.com/

你可能感兴趣的文章
Mac下export生效
查看>>
高性能网络编程
查看>>
Java中的queue和deque对比详解
查看>>
Sereja and Array-数组操作或者线段树或树状数组
查看>>
【Gym - 100812G 】Short Path (SPFA)
查看>>
HDU 1260:Tickets(DP)
查看>>
常见颜色的名称
查看>>
Java异步执行多个HTTP请求的例子(需要apache http类库)
查看>>
一些面试题
查看>>
percona-toolkit的安装及简单介绍
查看>>
Linux IPC实践(4) --System V消息队列(1)
查看>>
JAVA Excel API学习案例
查看>>
equals,==
查看>>
java处理图片--图片的缩放,旋转和马赛克化
查看>>
JavaScript--练习1--99乘法表
查看>>
自定义控件_水平滑动的View 自定义属性
查看>>
使用URL在线语音合成
查看>>
微信小程序开发之scroll-view
查看>>
cmd隐藏指定文件
查看>>
OpenCV——轮廓特征描述
查看>>