1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
该类型保证能容纳实现所建立的最大对象的字节大小。
 
2.sizeof是算符,strlen是函数。
 
3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。sizeof还可以用函数做参数,比如:

 short f();
cout << sizeof(f()) << endl;

输出的结果是sizeof(short),即2。

4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。

5.大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因

 char str[]="";
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;

6.strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度,不是类型占内存的大小。

7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。

8.当适用了于一个结构类型时或变量,sizeof返回实际的大小,当适用一静态地空间数组,sizeof归还全部数组的尺寸。
sizeof 操作符不能返回被动态分配了的数组或外部的数组的尺寸

9.数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,
如:

 fun(char [])
fun(char []) //都等价于 fun(char *)

在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小
如果想在函数内知道数组的大小, 需要这样做:
进入函数后用memcpy拷贝出来,长度由另一个形参传进去

 fun(unsiged char *p1, int len)
{
unsigned char* buf = new unsigned char[len+]
memcpy(buf, p1, len);
}
 char* ss = "";

sizeof(ss)结果是4。 ss是指向字符串常量的字符指针,sizeof获得的是一个指针的之所占的空间,所以是4。
sizeof(*ss)结果1.*ss是第一个字符 其实就是获得了字符串的第一位'0'所占的内存空间,是char类型的,占了1位。
strlen(ss)结果则是10。 如果要获得这个字符串的长度,则一定要使用 strlen

最新文章

  1. C语言scanf函数详细解释
  2. 【译】Java中的枚举
  3. sql2014 新建用户并登陆
  4. Android网络编程只局域网传输文件
  5. Android核心分析之二十二Android应用框架之Activity
  6. SQL取某个字段最大(小)数值及其相应行的其他字段值的句语
  7. 5、四大组件之一-Activity与Intent
  8. hdoj 1686 Oulipo【求一个字符串在另一个字符串中出现次数】
  9. Android code wiki
  10. SendMessage用法实例
  11. Ridge Regression and Ridge Regression Kernel
  12. 扩展Python模块系列(二)----一个简单的例子
  13. python 爬取糗事百科 gui小程序
  14. jquery基本语法(一)
  15. java基础-位运算符
  16. 银行手机APP安全评估报告【转载】
  17. 水晶报表一页变两页,server2008添加XPS虚拟打印机
  18. 看代码网备份|利用WebClient|eKing.CmdDownLoadDbBakOper|实现定时拷贝数据库备份文件到文件服务器
  19. 错误 Unable to find vcvarsall.bat 的终极无敌最完美的解决办法
  20. Lock 和 synchronized 的区别

热门文章

  1. MVC-自定义HttpModule处理
  2. Scalaz(3)- 基础篇:函数概括化-Generalizing Functions
  3. 在VS 2012 配置SDL
  4. JS json的使用
  5. 开源日志记录工具log4j
  6. import 本地Python module或package
  7. 如何理解javascript closure ?
  8. 用JSON.parse和eval出现的问题
  9. ArcGis 001270 : 合并数据失败
  10. DevExpress .NET界面开发示例大全