您的位置:首页 > 其它

sizeof和strlen()区别

2017-12-19 18:37 260 查看
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) = "<<sizeof(add)<<endl;  报错,故不能是函数名。

cout<<"sizeof(iData1) = "<<sizeof(iData1)<<endl;
cout<<"sizeof(dData2) = "<<sizeof(dData2)<<endl;
cout<<"sizeof(pData2) = "<<sizeof(pData)<<endl;
cout<<"sizeof(double) = "&l
4000
t;<sizeof(double)<<endl<<endl;

cout<<"sizeof(p1) = "<<sizeof(p1)<<endl;
cout<<"sizeof(*p1) = "<<sizeof(*p1)<<endl<<endl;

cout<<"sizeof(p3) = "<<sizeof(p3)<<endl;
cout<<"strlen(p3) = "<<strlen(p3)<<endl<<endl;

cout<<"strlen(p1) = "<<strlen(p1)<<endl;
cout<<"strlen(p2) = "<<strlen(p2)<<endl;

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 <string.h>


三、延伸

数组名和指针不同,当数组名作为函数形参时会退化为同类型的指针,这也是为什么传递数组名时会传递数组长度的原因。

单引号的表示一个字符,比如说字母a,在程序中以’a’表示。

双引号围起来的是一个字符串,后面有一个’\0’,这是例子中为什么“sizeof(p3)”比“strlen(p3)”大一的原因。

源码工程。

http://download.csdn.net/download/itworld123/10164900
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: