为什么在 void 函数内部更改时变量值没有得到更新?

Why is the variable value not getting updated when changed inside void function?

在此数组插入代码中,当我在 void insert 函数中递增时,usedsize 的值不会更新。我想知道为什么这种情况一直发生,为什么 arr[i] 的值在没有更新时得到更新?

#include <stdio.h>
#include <stdlib.h>

void insert(int arr[], int element, int index, int usedsize){
    for(int i=usedsize;i>=index;i--){
        arr[i+1]=arr[i];
    }
    arr[index]=element;
    usedsize++;

}

void traverse(int arr[], int size){
    for(int i=0;i<size;i++){
        printf("%d",arr[i]);
        printf("\t");
    }

}
int main()
{
    int narr[25]={5,7,12,34,45};
    int index = 3;
    int usize = 5;
    int element = 21;
    insert(narr,element,index,usize);
    traverse(narr,usize);

    return 0;
}

正如评论者指出的那样,insert 函数中的变量 usedsize 是一个副本。

why does the value of arr[i] get updated?

在 C 中,数组名表示第一个元素的地址,并且数组始终作为指针传递,即使您使用方括号表示法 0.

#include <stdio.h>
#include <stdlib.h>

void insert(int arr[], int element, int index, int *usedsize) {
    printf("Address arr[%d] is %p\n", 0, &arr[0]);
    printf("Address usedsize is %p\n", usedsize);
    for(int i=*usedsize; i>=index; i--) {
        arr[i+1]=arr[i];
    }
    arr[index]=element;
    (*usedsize)++;
}

int main() 
{
    int narr[25]= {5,7,12,34,45};
    int index = 3;
    int usize = 5;
    int element = 21;
    printf("Address arr[%d] is %p\n", 0, &narr[0]);
    printf("Address usize is %p\n", &usize);
    insert(narr,element,index,&usize);
    traverse(narr,usize);
    return 0;
}

Original code:
- Address arr[0] is 0x7ffdf2f8b510
- Address usize is 0x7ffdf2f8b504
- Address arr[0] is 0x7ffdf2f8b510
- Address usedsize is 0x7ffdf2f8b4cc
Now:
- Address arr[0] is 0x7fff0c03d740
- Address usize is 0x7fff0c03d734
- Address arr[0] is 0x7fff0c03d740
- Address usedsize is 0x7fff0c03d734