sizeof:
计算数组长度,返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,该类型保证能容纳实现所建立的最大对象的字节大小。
strlen:
strlen在C语言中是string标准库中的函数,但其本质是一个计数器,从程序员给的任何位置开始计数,直到遇到\0,便结束然后返回计数器的值
例题代码解析:
#include <stdio.h>
#include <string.h>
void func(char a[100])
{
printf("--1--%d\n",sizeof(a)); //a的长度是100,但是它是一个函数的参数,因此是地址传递,所以sizeof的值为4
printf("--strlen1--%d\n",strlen(a)); //参数传递的是b,字符串b有效长度是遇到\0结束,因此strlen为5
}
int main()
{
char a[] = "hello world!";
char* p = a;
char b[100] = "nihao";
printf("--2--%d\n",sizeof(a)); //数组a是变长数组,根据所初始化的长度确定长度(包括\0),因此sizeof的长度为13
printf("--strlen2--%d\n",strlen(a)); //strlen依然是有效长度所以是12
printf("--3--%d\n",sizeof(p)); //*p是一个指针,指针类型在32位操作系统下是四个字节的,因此sizeof的值为4
printf("--strlen3--%d\n",strlen(p)); //*p = a因此数组a中的字符串赋值给了指针p所以strlen为12
printf("--4--%d\n",sizeof(b)); //b的长度为100,因此sizeof为100
func(b); //函数传参
return 0;
}