C语言中sizeof、strlen函数的部分理解

时间:2020-12-19 17:58:17

一、测试环境

  Win10 + Visual Studio 2017

二、测试代码

#include "pch.h"
#include <iostream>
#include <string>
#include <vector> using namespace std; int main(void) {
char a[] = "hello";
char b[] = { 'h','e','l','l','o'};
char c[] = "hello";
const char *d = "hello";
cout << "sizeof(a) = " << sizeof a << ' ' << "strlen(a) = " << strlen(a) << '\n' <<endl;
cout << "sizeof(b) = " << sizeof b << ' ' << "strlen(b) = " << strlen(b) << '\n' << endl;
cout << "sizeof(c) = " << sizeof c << ' ' << "strlen(c) = " << strlen(c) << '\n' << endl;
cout << "sizeof(d) = " << sizeof d << ' ' << "strlen(d) = " << strlen(d) << '\n' << endl;
return ;
}

三、测试结果 

  结果1(x86):

sizeof(a) =  strlen(a) = 

sizeof(b) =  strlen(b) = 

sizeof(c) =  strlen(c) = 

sizeof(d) =  strlen(d) = 5

  结果2(x64):

sizeof(a) =  strlen(a) = 

sizeof(b) =  strlen(b) = 

sizeof(c) =  strlen(c) = 

sizeof(d) =  strlen(d) = 

四、测试结果分析

  C语言中sizeof、strlen函数的部分理解

图 1 变量a的内容

C语言中sizeof、strlen函数的部分理解

图 2 变量b的内容

C语言中sizeof、strlen函数的部分理解

图 3 变量c的内容

C语言中sizeof、strlen函数的部分理解

图4 变量d内容

  1、sizeof函数的使用

  sizeof 运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小:

    sizeof (data type)

  data type:要计算大小的数据类型,包括类、结构、共用体和其他用户自定义数据类型。

  实质上,char属于整数类型,存储的是整数,而不是字符,计算机用特定的数字编码来处理字符,比如常用的源自于美国的ASCII编码。标准的ASCII码的范围是0~127,只需要7位二进制数即可表示,通常,char类型被定义为8位存储单元(1 Byte)。C语言一般把1字节定义为char类型占用的位(bit)数。【一般各种基本类型的数据占用位数的大小,均有相应的文件进行限制】

  sizeof函数在计算对象的大小时,都是先转换成对象类型,然后对对象类型进行计算。

  如果data type是指针的话,则计算的是计算机内部地址总线的宽度。指针,记录着另一个对象的地址,因为其存放地址的功能,造成其长度等于计算机内部总线地址的长度,与指针具体指向哪一类型的数据没有关系。(32-bit OS 为 4,64-bit OS 为8)

  综上,可以容易的理解为:char a[10]、char b[10]为同一类型,char c[]根据实际的复制看作是char c[6],char * d为指针,已知各自的结果为上图所示。

  2、strlen函数的使用

  strlen()函数用于计算字符串中字符的长度,在长度的计算过程中,遇到规定的截止符则停止计算。