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

一、测试环境

  Win10 + Visual Studio 2017

二、测试代码

#include "pch.h"
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(void) {
    char a[10] = "hello";
    char b[10] = { 'h','e','l','l','o'};
    char c[] = "hello";
    const char *d = "hello";
    cout << "sizeof(a) = " << sizeof a << ' ' << "strlen(a) = " << strlen(a) <<  '
' <<endl;
    cout << "sizeof(b) = " << sizeof b << ' ' << "strlen(b) = " << strlen(b) << '
' << endl;
    cout << "sizeof(c) = " << sizeof c << ' ' << "strlen(c) = " << strlen(c) << '
' << endl;
    cout << "sizeof(d) = " << sizeof d << ' ' << "strlen(d) = " << strlen(d) << '
' << endl;
    return 0;
}

三、测试结果 

  结果1(x86):

sizeof(a) = 10 strlen(a) = 5

sizeof(b) = 10 strlen(b) = 5

sizeof(c) = 6 strlen(c) = 5

sizeof(d) = 4 strlen(d) = 5

  结果2(x64):

sizeof(a) = 10 strlen(a) = 5

sizeof(b) = 10 strlen(b) = 5

sizeof(c) = 6 strlen(c) = 5

sizeof(d) = 8 strlen(d) = 5

四、测试结果分析

  

 图 1 变量a的内容

 图 2 变量b的内容

 图 3 变量c的内容

图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()函数用于计算字符串中字符的长度,在长度的计算过程中,遇到规定的截止符则停止计算。

原文地址:https://www.cnblogs.com/wyt123/p/10696713.html