sizeof和strlen()区别
2017-12-19 创建人:Ruo_Xiao
邮箱:xclsoftware@163.com
2018-01-16 修改人:Ruo_Xiao
增加strlen的头文件的说明。
#include "stdafx.h"
#include "iostream"
using namespace std;int add(int i,int t)
{return (i+t);
}int _tmain(int argc, _TCHAR* argv[])
{int iData1[5];double dData2[7];int *pData = new int[3];char *p1 = "12345"; char *p2 = new char[3];char p3[] ="Hello World";p2[0] = '1';p2[1] = '2';p2[2] = '3';p2[3] = '3';p2[4] = '4';memset(iData1,0,sizeof(int)*5);memset(dData2,0,sizeof(double)*7);//cout<<"sizeof(add) = "<cout<<"sizeof(iData1) = "<<sizeof(iData1)<cout <<"sizeof(dData2) = "<<sizeof(dData2)<cout<<"sizeof(pData2) = "<<sizeof(pData)<cout<<"sizeof(double) = "<<sizeof(double)<cout<<"sizeof(p1) = "<<sizeof(p1)<cout<<"sizeof(*p1) = "<<sizeof(*p1)<cout<<"sizeof(p3) = "<<sizeof(p3)<cout<<"strlen(p3) = "<<strlen(p3)<cout<<"strlen(p1) = "<<strlen(p1)<cout<<"strlen(p2) = "<<strlen(p2)<cin.get();return 0;
}
运行结果如下:
一、sizeof
- “sizeof”是操作符。
- 返回值的类型是size_t,它在头文件中定义如下:
typedef unsigned int size_t; - 返回值意义是保证能容纳实现所建立的最大对象的字节大小。
- 参数可以是数组、指针、类型、对象等。
- 编译时执行。
由上述例子的运行结果可知:
(1)当形参是一个结构类型或变量时, sizeof 返回实际的大小。
(2)当形参是一个静态地址空间时, sizeof 归还全部数组的所占的字节数。
(3)不能返回动态地被分派了的数组或外部的数组的所占的字节数。
因为该变量里面的内容是某一块内存的首地址,不是连续的,故只能返回指针所占的字节数。
(4)有的小伙伴说可以使用“sizeof(函数名)”,在这里更正一下,由代码可知,这么做是错误的。The sizeof operator shall not be applied to an expression that has function type or an incomplete type, to the parenthesized name of such a type, or to an expression that designates a bit-field member.
翻译:sizeof不能用于函数类型和不完整的类型、这些类型带括号的或者成员也不行。
二、strlen ()
- size_t strlen(const char * _Str);
- 该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符’\0’。返回的长度大小不包括’\0’。
- 由上述例子中可以发现,由于”p1”由字符串赋值(后面自带“\0”),所以可以得到p1的字符串长度为5。而“p2”是由字符单个赋值,并且后面的“\0”不知道在什么地方,所以该字符串长度为错误值“16”。
- 运行时执行。
- 头文件:
#include
三、延伸
- 数组名和指针不同,当数组名作为函数形参时会退化为同类型的指针,这也是为什么传递数组名时会传递数组长度的原因。
- 单引号的表示一个字符,比如说字母a,在程序中以’a’表示。
双引号围起来的是一个字符串,后面有一个’\0’,这是例子中为什么“sizeof(p3)”比“strlen(p3)”大一的原因。 - 源码工程。
http://download.csdn.net/download/itworld123/10164900
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
