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得到的都是指针的栈大小
转载于:https://blog.51cto.com/johnwei/1322662