主函数中定义的数组作为形参调用时如何知道数组的长度
例如以下代码voidf(inta[]){printf("func%d\n",sizeof(a));}voidmain(){inta[50]={0};printf("mai...
例如以下代码
void f(int a[]){
printf("func %d\n", sizeof(a));
}
void main() {
int a[50]={0};
printf("main %d\n", sizeof(a));
}
结果是主函数中大小为200,函数中长度为4,为什么不是200呢,怎么才能得到数组的大小呢。 展开
void f(int a[]){
printf("func %d\n", sizeof(a));
}
void main() {
int a[50]={0};
printf("main %d\n", sizeof(a));
}
结果是主函数中大小为200,函数中长度为4,为什么不是200呢,怎么才能得到数组的大小呢。 展开
展开全部
void f(int a[]){
printf("func %d\n", sizeof(a)); //a是地址,即指针,所以,变量所占空间大小为4 在子函数中,如果函数调用者没有将数组大小传入子函数,则子函数是无法得到数组大小的。
}
printf("func %d\n", sizeof(a)); //a是地址,即指针,所以,变量所占空间大小为4 在子函数中,如果函数调用者没有将数组大小传入子函数,则子函数是无法得到数组大小的。
}
追问
那为什么主函数总能显示200呢....
追答
int a[50]={0};
printf("main %d\n", sizeof(a)); 这里a是数组,sizeof(a)表示数组所占的空间大小=50*sizeof(int)=50*4=200个字节 数组才可以达到效果。
而只要不在数组的定义区域引用数组,都会认为是指针,所以,传到函数中就不能得到了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询