首先放上代码和运行结果。(在VC6.0上运行)

 #include<stdio.h>
#include<string.h> int main(void)
{
char s1[]="YeHuan";
char *s2="YeHuan";
char s3[]="Ye\0Huan";
char *s4="Ye\0Huan";
printf("sizeof(s1) %d\n",sizeof(s1));
printf("sizeof(s2) %d\n",sizeof(s2));
printf("sizeof(s3) %d\n",sizeof(s3));
printf("sizeof(s4) %d\n",sizeof(s4));
printf("sizeof(\"YeHuan\") %d\n",sizeof("YeHuan"));
printf("sizeof(\"Ye\\0Huan\") %d\n",sizeof("Ye\0Huan"));
printf("strlen(s1) %d\n",strlen(s1));
printf("strlen(s2) %d\n",strlen(s2));
printf("strlen(s3) %d\n",strlen(s3));
printf("strlen(s4) %d\n",strlen(s4));
printf("strlen(\"YeHuan\") %d\n",strlen("YeHuan"));
printf("strlen(\"Ye\\0Huan\") %d\n",strlen("Ye\0Huan"));
return ;
}

运行结果如下。

sizeof(s1) 7
sizeof(s2) 4
sizeof(s3) 8
sizeof(s4) 4
sizeof("YeHuan") 7
sizeof("Ye\0Huan") 8
strlen(s1) 6
strlen(s2) 6
strlen(s3) 2
strlen(s4) 2
strlen("YeHuan") 6
strlen("Ye\0Huan") 2

下面本人对这个运行结果作简要分析。

首先sizeof运算符是计算后面的变量(或者常量、数组名、类型标识符等等)所占内存空间字节大小,该运算结果在运行之前是确定的。

所以一个数组所占字节大小恰好是数组内元素个数乘以每个元素占字节大小,而数组内元素的个数(仅考虑一维数组)在定义数组时的中括号内给出,如不给出,则由初始化的内容决定。

由此可知s1数组内元素个数为7,因为后面字符串需要占用7个字节(包括字符串结尾标记'\0'),所以得到运行结果的第1、5行。

同理可得s3数组内元素个数为8(虽然里面有个'\0',但是要想完全存放里面所有的字符必须要8个字节),所以得到运行结果的第3、6行。

因为指针变量占4个字节(win32控制台应用程序中,包括字符指针、整型指针、数组指针、结构体指针、函数指针、二级指针、多级指针、通用指针void *等等),所以得到运行结果的第2、4行。

strlen()函数用于计算一个字符指针指向的区域(自动向后延伸,到'\0'结束)所能得到的字符串的长度(即字符个数,不包括结尾标记),所以得到运行结果的第7到12行。

sizeof运算符和strlen()函数的更多相关文章

  1. sizeof运算符和strlen函数的区别

    1.sizeof是运算符,而strlen是函数. 2.sizeof操作符的运算结果为size_t,他在头文件中的typedef为unsigned int.该类型保证能容纳所操作对象的最大字节大小. 3 ...

  2. C++中sizeof操作符与strlen函数

    sizeof操作符: sizeof是一个操作符,返回一条表达式或一个类型名字所占的字节数.返回值一个常量表达式,类型为size_t. size_t sizeof(type) size_t sizeof ...

  3. sizeof运算符、malloc函数及free函数

    一.sizeof运算符的用法 1.sizeof运算符给出某个类型或变量在内存中所占据的字节数. int a;  sizeof(a)=4;  //sizeof(int)=4; double b;  si ...

  4. sizeof运算符、虚函数、虚继承考点(待修改)

    参考: http://blog.csdn.net/wangyangkobe/article/details/5951248 下面的文章解释有错误,不要看.......... 记住几句话: 编译器为每个 ...

  5. C++ sizeof操作符的用法和strlen函数的区别

    摘要:本人首先介绍了C++中sizeof操作符的用法和注意事项,其次对比了和strlen的区别和使用,方便大家在写代码的时候查阅,和面试.笔试的时候复习. 目录: sizeof的用法: sizeof和 ...

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

    一.测试环境 Win10 + Visual Studio 2017 二.测试代码 #include "pch.h" #include <iostream> #inclu ...

  7. sizeof和strlen函数区别

    一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保 ...

  8. c语言之sizeof总结+strlen函数

    一.sizeof的概念 Sizeof是C语言的一种单目操作符,如C语言的其他操作符++.–等.它并不是函数.Sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是一个表达式或括在括号内的类 ...

  9. C语言strlen函数和sizeof操作符

    字符'x'于字符串"x"的区别 'x' 属于基本类型(char)字符类型-----------------由1个字符组成('x') "x"属于派生类型(char ...

随机推荐

  1. Reactive Extensions (Rx) 入门(1) —— Reactive Extensions 概要

    译文:https://blog.csdn.net/fangxing80/article/details/7381619 原文:http://www.atmarkit.co.jp/fdotnet/int ...

  2. uni-app下拉刷新加载刷新数据

    onPullDownRefresh监听该页面用户下拉刷新事件需要在 pages.json 里开启 enablePullDownRefresh "globalStyle": { } ...

  3. mvc基础配置

    视图解析器 在spring-mvc文件中编写 <!--配置视图解析器--> <bean class="org.springframework.web.servlet.vie ...

  4. 实现mysql的读写分离(mysql-proxy)____1(mysql的主从复制,基于gtid的主从复制,半同步复制,组复制)

    主从复制原理: 从库生成两个线程,一个I/O线程,一个SQL线程: i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中:主库会生成一个 log ...

  5. 5098: [BZOJ1098][POI2007]办公楼biu

    5098: [BZOJ1098][POI2007]办公楼biu 没有数据结构就很棒 一个看上去非常玄学的代码 const int N=1e5+10,M=2e6+10; int n,m; int fa[ ...

  6. prometheus(docker)安装和报警 -- nginx域名监控

    软件组件:prometheusalertmanagerprometheus-webhook-dingtalk nginx-vts-exporternginx (###--add-module=../n ...

  7. BERT模型

    BERT模型是什么 BERT的全称是Bidirectional Encoder Representation from Transformers,即双向Transformer的Encoder,因为de ...

  8. eventlet 模块搭建 WEB 服务器

    eventlet这个强悍的东东,看到我同事的一些整理.故贴出来,大家一起分享~ motivation 114.113.199.11服务器上nova服务中基于python eventlet实现的定时任务 ...

  9. SpringMvc的 @Valid 拦截到的异常如何抛出

    SpringMvc中,校验参数可以使用 @Valid 注解,同时在相应的对象里使用 @NotBlank( message = "昵称不能为空")@NotNull( message ...

  10. error Microsoft Visual C++ 14.0 is required 解决方案

    Windows平台上,pip install fastFM  scrapy等工具的时候,经常出现 error Microsoft Visual C++ 14.0 is required 的错误,   ...