sizeof是一个操作符,不是函数;
而strlen是一个库函数;
sizeof是计算所占内存空间的,不管你内容是什么,只要知道占多少内存,
而strlen是跟内容有关的,它是计算字符串长度的(字符数组也是可以的),其核心是统计字符串中'/0'前有多少字符,一定要找'/0',所以它要关注内容,
下面我们通过几道题来讲解,
这里的4/8所代表的是地址在不同编译器下所占字节不同,有的是4,有的是8
验证一下输出,
下面这个代码大家来练习一下,
char arr[] = { 'a','b','c','d','e','f' };printf("%d\n", sizeof(arr));printf("%d\n", sizeof(arr + 0));printf("%d\n", sizeof(*arr));printf("%d\n", sizeof(arr[1]));printf("%d\n", sizeof(&arr));printf("%d\n", sizeof(&arr + 1));printf("%d\n", sizeof(&arr[0] + 1));
第一个很简单,计算的是整个数组所占字节数,即6,
第二个arr代表的是首元素地址,+0代表首元素地址的大小,即4/8
第三个对arr首元素地址解应用,就是在问a[0]所占字节大小,即1,
第四个arr[1]是第二个元素,即1
第五个&arr代表的是整个数组的地址,也是地址,即4/8
第六个&arr+1是跳过整个数组后的地址,也是地址,即4/8
第七个&arr[0]是首元素地址,首元素地址加一也是地址,就是4/8
下面我们来看strlen,同样通过题目来讲解,