(1) sizeof是运算符求变量、数组或者数據类型在内存中的实际长度,这是在编译阶段就已经确定了的一个数值它的参数可以是变量[普通变量,指针变量]、数组名或者数据类型
sizeof()的参数可以是数据类型,所以还可以求构造类型[结构体、共用体和联合体]的长度及其变量的长度
(2) strlen是一个函数,专门用于求c语言字符串數组的长度函数原型如下:
注意,它的参数是一个字符型指针给定一个入口地址,它就会连续不停地遍历内存上的值停止条件为:碰到结束符’\0’。所以可以将字符数组的数组名作为参数,或者一个字符指针作为参数[这两者都代表c语言字符串数组的首地址]
2. 错误地使用sizeof求数组长度
2.1 对于字符型数组
如果使用sizeof求数组长度,则会包含最后一个结束符
所以,对于字符数组应该使用strlen来求得c语言字符串数组嘚实际长度,程序修改如下:
2.2 对于非字符型数组
对于非字符型数组使用sizeof求数组元素个数的时候,跟具体的类型有关错误的使用示例程序:
这个方法很好理解,sizeof(数组名)是编译阶段确定的内存大小它是一片连续的内存块,大小等于数据个数(len)乘以每一个数据元素的字节大小即:sizeof(数组名) = len * sizeof(元素类型),所以:len = sizeof(数组名)/sizeof(元素类型)