数组在void函数中改变,仍在外面改变!为什么?(范围)

jot*_*ape 1 c scope function

这是排序算法的简单实现.我的问题是.该数组numbers在main中声明并初始化.然后,我像函数中的参数一样传递它sort(是复制吗?).在sort函数内部numbers,现在被调用array(据我所知,副本)被更改(排序).那么,为什么在调用函数之后,数组numbers被改变了(这就是我想要的,买就想知道为什么??.array范围在sort,而不是main.

int main(void)
{
    int numbers[SIZE] = { 4, 15, 16, 50, 8, 23, 42, 108 };
    for (int i = 0; i < SIZE; i++)
        printf("%d ", numbers[i]);
    printf("\n");

    sort(numbers, SIZE);

    for (int i = 0; i < SIZE; i++)
        printf("%d ", numbers[i]);
    printf("\n");
    return 0;
}
void sort(int array[], int size)
{
    int swaps = 0;

    while(swaps==0)
    {
        for(int i = 0; i < size ; i++)
        {
            for(int j = i + 1; j < size ; j++)
            {
                if( array[i] > array[j] )
                {
                    // Swapping
                    int temp = array[i]; 
                    array[i] = array[j];
                    array[j] = temp;

                    swaps ++;
                }   
            }
        }
    }    
}
Run Code Online (Sandbox Code Playgroud)

tom*_*myo 5

int array[]是一样的int *array.你正在传递指针.

  • 这不太正确.在许多情况下,数组被转换为指向其第一个元素的指针,但数组和指针非常不同.在函数原型中,`int array []`确实只是编写`int*array`的另一种方式. (5认同)