sizeof用法总结
sizeof在C语言中经常遇到,但它的用法和注意事项很多人都没在意过,我通过翻很多人的博客以及自己的理解总结出sizeof常见的用法。
首先应该澄清sizeof是运算符而不是函数,这就是和strlen()本质的区别了,strlen需要头文件。当然他们的功能表面上也有很多相似的地方,但要看他们的操作原理。
首先strlen只能针对指针而不能针对类型,通常当对一个数组使用这个函数时,参数传递给strlen就会退化为指针,指针一位位往后移直到遇到'\0'停止('\0'不算),然后将长度返回。
sizeof则既可以计算类型的长度(sizeof(int))也可计算数组长度,但需要注意的细节是,对数组初始化方式不同sizeof的值可能不同:
int a[] = {'a','b','c','d','e'};
int b[] = "abcde";
上面两种初始化方式看起来一样,其实第一种sizeof值是5,第二种是6.就是以内以数组b的方式初始化编译器会自动在数组后补充'\0',然后计入长度。还有一个细节问题:
int a[20]="0123456789";
上面数组的strlen和sizeof值分别为10,20,因为按上面说的当数组做参数传给strlen时要退化为指针,然后依次往后+1计数直到'\0'为止,因此为10,而sizeof是因为定义数组时已经定义了数组大小,因此它会直接返回20.