C语言!!为什么传参数过去会变!求解答!

问题遇到的现象和发生背景
int main(){
    int V[]= {10,3,4,5,4};        
    int P[] = {24,2,9,10,9};     
    int len = sizeof(V)/sizeof(V[0]);   
    printf("%d\n",len); 
    Knapsack01(V,P,13);           
} 
int Knapsack01(int V[], int P[],int c){
    int len2 = sizeof(V)/sizeof(V[0]);   
    printf("%d\n",len2); 
   for(int i=0; i<5; i++)
        printf("%d\n",V[i]); 

img

为什么V[]数组传参过去后,len会变少啊,但是printf出来的V数组仍然是原来的数组,求解答!

主函数可以获知数组的长度,但是传入之后v变为单纯的指针,函数无法获取其长度
在主函数中可以正确计算数组的长度
但是传入函数后,该算是计算的是指针长度和int长度的倍数关系,因为64位下指针长度为8字节,int为4字节,所以输出为2
有帮助望采纳~

把函数参数定义成 int V[5], int P[5],即可

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632