解析:
由以下几个例子我们说明sizeof和strlen之间的区别。
第1个例子:

sizeof(ss)结果为4,ss是指向字符串常量的字符指针。
sizeof(*ss)结果为1,*ss是第一个字符。
第2个例子:

sizeof(ss)结果为11,ss是数组,计算到“\0”位置,因此是(10+1)。
sizeof(*ss)结果为1,*ss是第一个字符。
第3个例子:

sizeof(ss)结果为100,ss表示在内存中预分配的大小,100×1。
strlen(ss)结果为10,它的内部实现是用一个循环计算字符串的长度,直到“\0”为止。
第4个例子:

sizeof(ss)结果为400,ss表示在内存中的大小,100×4。
strlen(ss)错误,strlen的参数只能是char*,且必须是以“\0”结尾的。
第5个例子:

cout<<sizeof(X)<<endl;结果为12,内存补齐。
cout<<sizeof(x)<<endl;结果为12,理由同上。
答案:
通过对sizeof与strlen的深入理解,得出两者区别如下:
(1)sizeof操作符的结果类型是size_t,它在头文件中的typedef为unsigned int类型。该类
型保证能容纳实现所建立的最大对象的字节大小。
(2)sizeof是运算符,strlen是函数。
(3)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以“\0”结尾的。
sizeof还可以用函数做参数,比如:

输出的结果是sizeof(short),即2。
(4)数组做sizeof的参数不退化,传递给strlen就退化为指针。
(5)大部分编译程序在编译的时候就把sizeof计算过了,是类型或是变量的长度。这就
是sizeof(x)可以用来定义数组维数的原因:

(6)strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度,而不是类型
占内存的大小。
(7)sizeof后如果是类型必须加括号,如果是变量名可以不加括号。这是因为sizeof是
个操作符而不是个函数。
(8)当使用了一个结构类型或变量时,sizeof返回实际的大小。当使用一静态的空间数
组时,sizeof返回全部数组的尺寸。sizeof操作符不能返回被动态分配的数组或外部的数组的
尺寸。
(9)数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,如
fun(char [8])、fun(char [])都等价于fun(char *)。在C++里传递数组永远都是传递指向数组首
元素的指针,编译器不知道数组的大小。如果想在函数内知道数组的大小,需要这样做:进
入函数后用memcpy将数组复制出来,长度由另一个形参传进去。代码如下:

(10)计算结构变量的大小就必须讨论数据对齐问题。为了使CPU存取的速度最快(这
同CPU取数操作有关,详细的介绍可以参考一些计算机原理方面的书),C++在处理数据时
经常把结构变量中的成员的大小按照4或8的倍数计算,这就叫数据对齐(data alignment)。
这样做可能会浪费一些内存,但在理论上CPU速度快了。当然,这样的设置会在读写一些别
的应用程序生成的数据文件或交换数据时带来不便。MS VC++中的对齐设定,有时候sizeof
得到的与实际不等。一般在VC++中加上#pragma pack(n)的设定即可。或者如果要按字节存
储,而不进行数据对齐,可以在Options对话框中修改Advanced Compiler选项卡中的“Data
Alignment”为按字节对齐。
(11)sizeof操作符不能用于函数类型、不完全类型或位字段。不完全类型指具有未知
存储大小数据的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void
类型等。

说明sizeof的使用场合。

答案:
(1)sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如:

(2)用它可以看看某种类型的对象在内存中所占的单元字节。例如:

(3)在动态分配一对象时,可以让系统知道要分配多少内存。
(4)便于一些类型的扩充。在Windows中有很多结构类型就有一个专用的字段用来存
放该类型的字节大小。
(5)由于操作数的字节数在实现时可能出现变化,建议在涉及操作数字节大小时用
sizeof代替常量计算。
(6)如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。

说明sizeof和strlen之间的区别。的更多相关文章

  1. (三)论sizeof与strlen之间的区别

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

  2. 字符串赋值方式理解 sizeof 和strlen的一些区别

    #include<stdio.h>#include<string.h>  int main(){ int a,i=0; char ch[10000]; while(scanf( ...

  3. sizeof()和strlen()

    sizeof计算的是栈中大小 P { margin-bottom: 0.21cm; direction: ltr; color: rgb(0, 0, 0); text-align: justify } ...

  4. C-基础:详解sizeof和strlen,以及strstr

    sizeof和strlen (string.h) 先看几个例子(sizeof和strlen之间的区别):  (1) 对于一个指针, char* ss ="0123456789"; ...

  5. sizeof()与strlen()的区别

    首先需要说明的是sizeof和strlen都可以求长度,但是却有很大的区别,简单来说可以概括为以下几点: 1.sizeof是一个关键字,而strlen确实一个函数. 2.sizeof求的是字节长度,而 ...

  6. sizeof 跟 strlen 的区别

    1.参数 sizeof是c/c++ 中的一个操作符,其作用是返回对象或数据类型所占的内存字节数. 用法:sizeof(对象).sizeof 对象.sizeof(类型) 如果类型做参数,返回的是该类型所 ...

  7. sizeof和strlen的区别

    一.sizeof    sizeof(...)是运算符,而不是一个函数.    sizeof操作符的结果类型是size_t,在头文件中typedef为unsigned int,其值在编译时即计算好了, ...

  8. Sizeof与Strlen的区别与联系

    转自:http://www.cnblogs.com/carekee/articles/1630789.html 一.sizeof    sizeof(...)是运算符,在头文件中typedef为uns ...

  9. Sizeof与Strlen的区别与联系(转)

    Sizeof与Strlen的区别与联系 一.sizeof     sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型 ...

随机推荐

  1. C#TreeView读取Xml,TreeView导出到Xml

    实现功能有1.根据Xml生成TreeView2.双击修改节点3.右键添加子节点或添加要节点4.右键删除当前选择的节点5.将修改后的TreeView重新生成Xml文档 其实这个主要是实现 了Xml生成T ...

  2. LeetCode OJ-- Edit Distance **

    https://oj.leetcode.com/problems/edit-distance/ 动态规划,它的小规模问题是:当 word1  word2都比较小的时候,word1变成 word2需要的 ...

  3. WKWebView遇到的问题汇总

    一.手势放大缩小页面解决方法 1.通过操作webview中scrollview的代理方法来关闭 -(UIView *)viewForZoomingInScrollView:(UIScrollView ...

  4. ansible 2.7.1 快速开始

    refer to 官方手册 https://docs.ansible.com/ansible/latest/modules/modules_by_category.html refer to 中文手册 ...

  5. 10.1综合强化刷题 Day2

    a[问题描述]你是能看到第一题的 friends呢.                                                —— hja世界上没有什么比卖的这 贵弹丸三还令人绝 ...

  6. Ruby 定时任务之一(初步尝试)

    最近工作需要用到定时任务.原来写java的时候也用到过类似的Scheduler的功能. Ruby语言中也有同样功能的工具.rufus-scheduler.下面介绍一下rufus-scheduler. ...

  7. Vuex 通俗版教程

    作者 Yeaseon 已关注 2017.03.16 16:44* 字数 1245 阅读 243评论 2喜欢 4 本文基本上是官方教程的盗版,用通俗易懂的文字讲解Vuex,也对原文内容有删减. 如果你对 ...

  8. weblogic的集群与配置图文

      一.Weblogic的集群 还记得我们在第五天教程中讲到的关于Tomcat的集群吗? 两个tomcat做node即tomcat1, tomcat2,使用Apache HttpServer做请求派发 ...

  9. Unity3D开发基础组件提取总结

    在游戏开发过程中,除了逻辑功能的开发之外,还有非常多基础的模块.这些模块,对大部分手机网络游戏来说都是一样的.所以,在上个游戏已经上线运营大半年之际,我认为有必要将这些模块整理出来.让后面其它游戏的开 ...

  10. SVN切分支步骤

    1.右键project选择Brankch/Tag 2.选择SVN路径并在改路径下填写project名称 3.选择最新版本号 4.填写必要的凝视备忘,方便日后查看 5.刷新父文件夹文件夹.下载被切出来的 ...