sizeof()与strlen() 区别
来源:互联网 发布:资产阶级革命知乎 编辑:程序博客网 时间:2024/06/05 17:45
首先,两者存在本质区别:sizeof()是单目操作符,strlen()是C库函数。
原型为:
#include <string.h>
size_t strlen(const char *s);
size_t sizeof();
其次,* strlen()计算字符串的长度不包含结束符('\0'),而sizeof()计算占用字节数的时候包括结束符('\0')。
* strlen()只能使用char * 做参数,且必须是('\0')结尾;sizeof可以用类型做参数,还可以用函数做参数。数组传递给strlen就退化为指针了,传递给sizeof的参数不退化。
*1)对于一个结构类型时或变量,sizeof返回实际的大小。
2)对于一静态地空间数组,sizeof 归还全部数组的尺寸。
3)sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸 。
* 数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,如:fun(char []) 都等价于fun(char *)。
* sizeof操作符不能用于函数类型、不完全类型或位字段。不完全类型是指具有未知存储大小的数据数据类型,如未知存储大小的数组类型,void类型等
最后,sizeof()另解:
程序存储分布有三个区域:栈、静态和动态;
/* ???感觉如下描述不是很精确 待求解! */
所有能够从代码直接操作的对象,包括任何类型的变量、指针,都是在栈上的;
动态和静态存储区是靠栈上的指针间接操作的。
sizeof 操作符,计算的是对象在栈上的投影体积;除了栈上的char数组这一个特殊情况之外。。。
1). 数组用sizeof = 数组的步长(类型的长度)*数组的长度。
2). 复合结构sizeof= 各个数据成员的类型长度*声明的个数之和。(要考虑到字节对齐)
typedef struct student
{
int data;
static int number;
} node1;
typedef struct teacher
{
int data;
char name;
} node2;
sizeof(node1)=4个字节。//静态变量是放在全局数据区,sizeof计算栈分配的大小,不会计算静态变量的。
sizeof(node2)=8个字节。//字节对齐
3). 引用用 sizeof 。 如果引用的是对象,则先转化成引用的对象类型。如果是复合类型。则用2。否则直接计算。
- strlen与sizeof区别
- sizeof与strlen区别
- strlen与sizeof区别
- strlen() 与 sizeof() 区别
- sizeof与strlen区别
- strlen与sizeof区别
- strlen与sizeof区别
- sizeof与strlen区别
- strlen 与 sizeof 区别
- strlen与sizeof区别
- strlen与sizeof区别
- sizeof()与strlen() 区别
- strlen 与 sizeof 区别
- sizeof与strlen区别
- sizeof 与strlen区别
- sizeof 与 strlen 区别
- sizeof与strlen区别
- sizeof 与strlen()区别
- linux c/c++网络编程之—select模型
- solaris IPMP
- IOS开发苹果官方Sample Code及下载地址
- 项目自动化知道-4.按键发布Bat版
- 成绩处理
- sizeof()与strlen() 区别
- 千万不要赶时髦
- 切换上下文
- [框架技术推荐]ichartjs国产开源html5/js图表工具
- 2012 Hadoop与大数据技术大会盛大开幕
- Effective C++:条款5:对应的new和delete要采用相同的形式
- Eclipse设置自动生成注释
- iphone用UIWebView来显示网页
- A*(Astar)搜索算法的实现(C语言)