sizeof与strlen

5 阅读1分钟

sizeof计算变量所占内存空间大小,单位是字节,如果操作数是类型,计算的是使用类型创建的变量所占内存空间的大小。sizeof只关注占用内存空间的大小,不在乎内存中存放什么数据。

strlen是C语言库函数,功能是求字符串长度。函数原型如下:

size_t strlen ( const char * str );

统计的是从strlen函数的参数str中这个地址开始向后,\0之前字符串中字符的个数。strlen函数会一直向后找\0字符,直到找到为止,所以可能存在越界查找。 strlen关注到了字符串中具体的内容。

sizeofstrlen
1. 是操作符
2. 计算操作数所占内存的大小,单位是字节
3. 不关注内存中存放什么数据
1. 是库函数,使用需要包含头文件string.h
2. 是求字符串长度的,统计的是\0之前字符的个数
3. 关注内存中是否有\0,如果没有\0,就会持续往后找,可能会越界

数组名的意义:

  1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
  2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
  3. 除此之外所有的数组名都表示首元素的地址。(二维数组的首元素是一个一维数组)

小试牛刀:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    char* c[] = { "ENTER","NEW","POINT","FIRST" };
    char** cp[] = { c + 3,c + 2,c + 1,c };
    char*** cpp = cp;
    printf("%s\n", **++cpp);
    printf("%s\n", *--*++cpp+3);
    printf("%s\n", *cpp[-2]+3);
    printf("%s\n", cpp[-1][-1]+1);
    return 0;
}