C 函数中的数组大小

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; }

我正在使用普通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;
}
输出:

Size main: 100
Size function: 8

谢谢

发生这种情况是因为
sizeof(m)==sizeof(char*)
,这在您的平台上是
8


调用
函数(p)
时,
p
会衰减为指针,并丢失其大小信息。

数组一有机会就衰减为指针,因此在
函数中,您只有一个指针,在您的情况下是8字节。

当您将它作为指针传递给函数时,sizeof返回sizeof char pointer,不是数组的长度。这就是为什么在c函数中数组的长度通常作为附加参数传递的原因