一、测试环境

  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) = 

四、测试结果分析

  

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

C语言中sizeof、strlen函数的部分理解的更多相关文章

  1. C语言中sizeof()的用法

    语法 sizeof有三种语法形式: 1.sizeof(object); //sizeof(对象); 2.sizeof(type_name); //sizeof(类型); 3.sizeof object ...

  2. 对C语言中sizeof细节的三点分析

    转自对C语言中sizeof细节的三点分析 1.sizeof是运算符,跟加减乘除的性质其实是一样的,在编译的时候进行执行,而不是在运行时才执行. 那么如果编程中验证这一点呢?ps:这是前两天朋友淘宝面试 ...

  3. c语言中的rewind函数,Win CE 不支持,可用fseek函数替换

    FILE *read = fopen(cXmlFile,"rb"); if (read) { fseek(read, 0L, SEEK_END); int len = ftell( ...

  4. C语言中sizeof与strlen的区别

    1.sizeof sizeof为编译时期被替换,不会等到程序运行再来判断,所以sizeof返回的是数组的总字节数 #include<stdio.h> int main() { ]={'a' ...

  5. c语言中的malloc函数

    少壮不努力,大一的时候c语言学得不扎实,最近学数据结构的时候看到c语言中malloc函数都不知道了,这里记录一下,避免以后再忘. malloc的全称是memory allocation,中文叫动态内存 ...

  6. C语言中sizeof的用法

    今天同学问我sizeof可不可以计算结构体的大小,我竟然忘了C语言还有sizeof这个函数,我是多久没有写程序了啊!!!惭愧,上研究生后写嵌入式方面的程序就特别少了,看来以后还要经常来练练手才行.现在 ...

  7. C语言中sizeof与strlen区别

    本文转载自:http://www.2cto.com/kf/201109/105100.html 1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写"abc& ...

  8. c语言中:strlen和sizeof的区别和它们分别交换各自作用领域(\0问题)时的细微差别!!!

    本人c语言初学菜鸟一枚,今天通过敲了一段简单代码,发现strlen和sizeof之间的一些关系,总结如下: 用strlen计算数组长度要考虑进去\0 用sizeof计算字符串长度也要考虑进去\0 而s ...

  9. linux下C语言中的flock函数用法 【转】

    表头文件  #include<sys/file.h> 定义函数  int flock(int fd,int operation); 函数说明  flock()会依参数operation所指 ...

随机推荐

  1. Django 安装配置

    1-安装Python3.6.1 Python2.x 与3.x的版本在语法上稍有不同,区别在于输出语句的不同,这个可以看相关的文档. Python3.6.1,可以在Python的官网上下载:https: ...

  2. pip 在win10下安装

    http://blog.csdn.net/yupu56/article/details/50470970C:\Users\sunof\AppData\Local\Programs\Python\Pyt ...

  3. C++11-->单生产者,单消费者问题

    参考上一篇C++11并发编程 #include <iostream> #include <queue> #include <assert.h> #include & ...

  4. RN开发第二天

    今天上午配置了windows的Android的环境,下载node,Python,安装Android SDK和Android studio,JSK,然后配置用户变量和系统变量,然后npm install ...

  5. SQL-50 将employees表中的所有员工的last_name和first_name通过(')连接起来

    题目描述 将employees表中的所有员工的last_name和first_name通过(')连接起来.CREATE TABLE `employees` (`emp_no` int(11) NOT ...

  6. 接口自动化测试遭遇问题,excel中取出来的json串,无法使用requests去请求解决办法

    最近遭遇了一个问题,问题不大不小,想半天没想明白是哪里有问题,今天终于解决了 用python读取了excel用例中,body json字符串内容,然后requests去请求内容,结果一直报错,一直不明 ...

  7. SQLServer学习记录

    use TestDataBase;go -- 派生表-- 第3页,每页5条数据select * from (select ROW_NUMBER() over(order by stuId) as nu ...

  8. “学习CSS布局” 笔记

    学习网址:http://zh.learnlayout.com/no-layout.html 本文仅为学习笔记,内容非原创. position 默认值:static 没有添加额外属性的relative和 ...

  9. spring-data-mongodb 使用原生aggregate语句

    除了特殊注释外,本文的测试结果均基于 spring-data-mongodb:1.10.6.RELEASE(spring-boot-starter:1.5.6.RELEASE),MongoDB 3.0 ...

  10. 自建 yum 源

    生产环境需要大规模的安装部署rpm包,每次安装,更新,都需要上传,安装,比较麻烦,可以在生产环境中自建一个yum源. 1.http安装 yum -y install httpd systemctl s ...