首先的一个误解是以为sizeof是一个函数,因为我们常常看到sizeof()这样的用法,但是sizeof是一个操作符,一个一元操作符!!!
int i=0;
printf("%d/n",sizeof (int) );
上述代码显示sizeof i,sizeof(i),sizeof(int)都正确,但是sizeof int不对,当计算的是类型的大小时,必须用()
int array[10]={0};
void foo(int *array)
{
printf("array has %u elements!/n",(sizeof array / sizeof(int)));
}
你觉的会输出10吗,当然不会!!!!why???在多数系统中,他会输出1,因为sizeof针对的是一个指向整数类型的指针,而指针一般占用和int同样大小的存储空间。。。
那么能改变这种情况吗,就是说我能在一个子函数中知道传入的array有多大吗,至少就我所知而言,sizeof不可以。。。即使改成下面这样:
void foo_2(int **array)
{
printf("array has %u elements!/n",(sizeof *array / sizeof(int)));
}
还是不行,原因很简单,sizeof 就是判断这个变量的类型大小,他不会作一些替换之类的工作。。看看下面这几行代码,或许你就更清楚了!
char s[]="I love you!";
printf("%d/n",sizeof s);
将会输出12(包含了末尾的空字符)。但是
char *s="I love you!";
printf("%d/n",sizeof s);
将会输出。。。4。。。!!!所以至少在这个程度上来说数组和指针还是有一些区别的,这样我们可以用sizeof来获得一个数组的大小。。但是我不知道这是好事还是坏事。。。
int i=0;
printf("%d/n",sizeof (int) );
上述代码显示sizeof i,sizeof(i),sizeof(int)都正确,但是sizeof int不对,当计算的是类型的大小时,必须用()
int array[10]={0};
void foo(int *array)
{
printf("array has %u elements!/n",(sizeof array / sizeof(int)));
}
你觉的会输出10吗,当然不会!!!!why???在多数系统中,他会输出1,因为sizeof针对的是一个指向整数类型的指针,而指针一般占用和int同样大小的存储空间。。。
那么能改变这种情况吗,就是说我能在一个子函数中知道传入的array有多大吗,至少就我所知而言,sizeof不可以。。。即使改成下面这样:
void foo_2(int **array)
{
printf("array has %u elements!/n",(sizeof *array / sizeof(int)));
}
还是不行,原因很简单,sizeof 就是判断这个变量的类型大小,他不会作一些替换之类的工作。。看看下面这几行代码,或许你就更清楚了!
char s[]="I love you!";
printf("%d/n",sizeof s);
将会输出12(包含了末尾的空字符)。但是
char *s="I love you!";
printf("%d/n",sizeof s);
将会输出。。。4。。。!!!所以至少在这个程度上来说数组和指针还是有一些区别的,这样我们可以用sizeof来获得一个数组的大小。。但是我不知道这是好事还是坏事。。。