在 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 不是一个函数,因为函数调用必须有一对括号。

int num = 97;

printf("sizeof(num = 0)的值:%d\n",sizeof(num = 0)); printf("num 的值:%d\n",num);      运行结果为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是第一个字符。