C/C++培训
达内IT学院
400-996-5531
在 C/C++ 中,sizeof() 是一个判断数据类型或者表达式长度的运算符。今天我们主要来讲一讲C/C++基础sizeof与strlen 区别,下面先看看sizeof的定义:
1、sizeof 定义
sizeof 是 C/C++ 中的一个操作符(operator),返回一个对象或者类型所占的内存字节数。
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type(including aggregate types). This keyword returns a value of type size_t. ——来自MSDN
其返回值类型为 size_t ,在头文件 stddef.h 中定义为: typedef unsigned int size_t;
从sizeof 的定义可以看出:sizeof 不是一个函数,因为函数调用必须有一对括号。
#include <stdio.h>
int main(void)
{
int num = 97;
printf("sizeof(num = 0)的值:%d\n",sizeof(num = 0));
printf("num 的值:%d\n",num);
return 0;
}
运行结果为4,97;并不是4,0
说明:sizeof 不是标准意义上的一元操作符,不支持链式表达式,sizeof 作用域范围内的语句不会编译成机器码,如 sizeof(num++) 中的 ++ 不执行。sizeof 也不是函数, sizeof 更像一个特殊的宏,在编译阶段求值。
下面说一说sizeof与strlen 区别:
sizeof 是一个操作符,strlen 是库函数。
sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能以结尾
编译器在编译时就计算出了 sizeof 的结果,而 strlen 函数必须在运行时才能计算出来。并且 sizeof 计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际的长度。
数组做 sizeof 的参数不退化,传递给 strlen 就退化为指针了。如:
int ss[20]="0123456789";
sizeof(ss)=80, //ss表示在内存中的大小,20*4。
strlen(ss) //错误,strlen的参数只能是char*,且必须是以“\0”结尾的。
char *ss="0123456789";
sizeof(ss)=4, //ss是指向字符串常量的字符指针。
sizeof(*ss)=1, // *ss是第一个字符。
版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved