C 函数中的数组大小
我正在使用普通C99中的一些阵列,我需要知道它们的大小。有人知道为什么会这样吗:C 函数中的数组大小,c,arrays,function,size,C,Arrays,Function,Size,我正在使用普通C99中的一些阵列,我需要知道它们的大小。有人知道为什么会这样吗: int function(char* m){ return sizeof(m) / sizeof(m[0]); } int main(){ char p[100]; int s = sizeof(p) / sizeof(p[0]); printf("Size main: %d\nSize function: %d\n",s,function(p)); return 0; }
int function(char* m){
return sizeof(m) / sizeof(m[0]);
}
int main(){
char p[100];
int s = sizeof(p) / sizeof(p[0]);
printf("Size main: %d\nSize function: %d\n",s,function(p));
return 0;
}
输出:
Size main: 100
Size function: 8
谢谢 发生这种情况是因为
sizeof(m)==sizeof(char*)
,这在您的平台上是8
调用
函数(p)
时,p
会衰减为指针,并丢失其大小信息。数组一有机会就衰减为指针,因此在函数中,您只有一个指针,在您的情况下是8字节。当您将它作为指针传递给函数时,sizeof返回sizeof char pointer,不是数组的长度。这就是为什么在c函数中数组的长度通常作为附加参数传递的原因