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
相关文章推荐
- sizeof与strlen的区别
- sizeof和strlen的区别
- Sizeof与Strlen的区别与联系
- c语言中的sizeof()与strlen()的区别。
- sizeof与strlen的区别
- char *p 和 cha'r p[10]的区别/sizeof和strlen的区别
- Sizeof与Strlen的区别与联系
- Sizeof与Strlen的区别与联系
- 解析sizeof和strlen的区别
- Sizeof与Strlen的区别与联系
- Sizeof与Strlen的区别与联系
- strlen和sizeof的区别
- C++ 学习(第一天)sizeof与strlen 的区别
- sizeof()与strlen()的区别
- Sizeof与Strlen的区别与联系
- Sizeof与Strlen的区别与联系(转)
- sizeof()于strlen()函数的区别
- sizeof 和strlen的区别和联系
- Sizeof与Strlen的区别与联系(转)
- sizeof与strlen的区别与联系