首先放上代码和运行结果。(在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. JS的ES6的async

    1.async概念: 真在意义上解决异步回调函数的问题(由于promise的then方法中还是使用回调函数,而async中await并没有使用回调函数真正意义上解决回调函数),同步流程表达异步操作. ...

  2. 3-开发共享版APP(搭建指南)-修改手机验证码

    https://www.cnblogs.com/yangfengwu/p/11273743.html 请先看数据篇 或者参考 https://www.cnblogs.com/yangfengwu/p/ ...

  3. 洛谷 P1879 [USACO06NOV]玉米田Corn Fields 题解

    P1879 [USACO06NOV]玉米田Corn Fields 题目描述 Farmer John has purchased a lush new rectangular pasture compo ...

  4. 在itop4412移植linux4.14和设备树遇到的问题及解决

    Linux4.14的设备树下已经对itop4412做了支持,本来应该很容易进行移植,可是在使用讯为给的资料中,对exynos4412-itop-scp-core.dtsi中原本的代码全部进行了注释,并 ...

  5. Centos 或者 Redhat修改系统时间

    使用Redhat,打开电脑,系统时间比本地时间快一个小时 直接敲命令:date -s "2019-4-2 09:14:00"是立即生效了,但是重启后,系统时间还是原来的. 修改了其 ...

  6. webpack vue-cli2 配置打包测试环境

    目前vue-cli2上原配置是只有开发环境dev和线上环境prod的配置,但是我们实际场景上还有很多需要一个测试环境test,下面就是对测试环境的配置,将测试环境和线上环境的打包代码分开就不需要切来切 ...

  7. <每日 1 OJ> -LeetCode 13 . 罗马数字转正数

    题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 ...

  8. 第08组 Alpha冲刺(3/4)

    队名 八组评分了吗 组长博客 小李的博客 作业博客 作业链接 组员1李昕晖(组长) 过去两天完成了哪些任务 文字/口头描述 11月19日了解各个小组的进度与难以攻破的地方,晚上安排开会,安排新的冲刺任 ...

  9. Java编程思想之二 一切都是对象

    2.1 用引用操作对象 每种编程语言都有自己的操作内存中元素的方式. 在Java中,一切都可以视为对象,因此可以采用单一的固定语法. 2.2 必须由你创建所有对象 一旦创建一个引用,就希望它能与一个新 ...

  10. 高通平台sensor框架图【学习笔记】