通过sizeof可以计算出类型的长度,同样也可以计算出数组的长度,但是这具有一定的局限性。
以下是一段示例代码:
#include "stdio.h"
void Count_array_element_ptr(int *p){
printf("%d/n",sizeof(p)/sizeof(p[0]));
return ;
}
void Count_array_element_array(int array[]){
printf("%d/n",sizeof(array)/sizeof(array[0]));
return ;
}
int main(int argc, char* argv[])
{
printf("Hello World!/n");
int array[10];
//session 1: 计算出数组的长度
printf("%d/n",sizeof(array)/sizeof(array[0]));//使用这种表达方式,代替
//sizeof(array)/sizeof(int) 是有好处的
//因为这样子就可以直接修改array的类型而不需修改下面的语句
//使用这种方法得以计算出数组的长度,但是在经过函数参数传递
//之后,则不然
//session 2: 通过函数计算出数组的长度
Count_array_element_ptr(array);//经过函数参数的传递之后,得到的结果是1,而无论使用的形参类型是int *
//还是int array[]
//session 3: 通过函数计算出数组的长度
Count_array_element_array(array);//得到的结果与session 2相似
//conclusion:计算出数组的长度可以使用 sizeof(array)/sizeof(array[0])
//这种形式,但是这仅局限于数组声明的函数内,如果经过了形参的传递之后,则会失效
//具体更深层次的原因这里就不详细的讨论
return 0;
}
运行结果:
10
1
1