sizeof与strlen的区别

sizeof运算符

  • sizeof为一个操作符(operator),其作用是以字节为单位返回一个对象或者类型的大小。

  • 返回值类型为size_t,在头文件stddef.h中定义。一般定义为

typedef unsigned int size_t;
  • 语法形式为

sizeof( object ); // sizeof( 对象 );
sizeof( type_name ); // type_name( 类型 );
  • 在32位计算机中,一个指针变量的sizeof值结果必定为4,在64位系统中指针变量的sizeof结果为8(对编译器而言)。

  • 数组的sizeof值为数组所占用的内存字节数(数组作为函数的形参时会退化为指针)。

  • 结构体的sizeof值会发生字节对齐。

strlen函数

  • strlen(char*)求的是字符串的实际长度,方法是从开始一直到第一个'\0',不包括'\0'在内

理解 sizeof 只需要抓住一个要点:栈

程序存储分布有三个区域:栈、静态和动态。能够从代码直接操作的对象,包括任何类型的变量、指针,都是在栈上的;动态和静态存储区是靠栈上的所有指针间接操作的。 sizeof 操作符,计算的是对象在栈上的投影体积;记住这个就很多东西都很清楚了。

char const * static_string = "Hello";
// sizeof(static_string) 是 sizeof 一个指针,所以在 32bit system 是 4 
    
char stack_string[] = "Hello";   
//sizeof(stack_string) 是 sizeof 一个数组,所以是 6 * sizeof(char)  
   
char * string = new char[6];   
strncpy(string, "Hello", 6");   
// sizeof(string) 是 sizeof 一个指针,所以还是 4。
// 和第一个不同的是,这个指针指向了动态存储区而不是静态存储区。

不管指针指向的内容在什么地方,sizeof得到的都是指针的栈大小

你可能感兴趣的:(C语言,区别,sizeof,strlen)