c - 数组在void函数里改了,外面还是改了!为什么? (范围)

标签 c function scope

这是排序算法的简单实现。我的问题是。数组 numbers 在 main 中声明并初始化。然后,我将它作为函数 sort 中的参数传递(是副本吗?)。在 sort 函数中,numbers(现在称为 array)(据我所知是一个副本)被更改(已排序)。那么,为什么在调用函数后,数组numbers发生了变化(这就是我想要的,买想知道为什么??。array作用域在排序,而不是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 ++;
                }   
            }
        }
    }    
}

最佳答案

int array[]int *array 相同。您正在传递一个指针。

关于c - 数组在void函数里改了,外面还是改了!为什么? (范围),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13280424/

相关文章:

c++ - 在 C 中循环遍历十六进制变量

c - 获取C中变量的最大值

javascript - 为什么不推荐 `with`?有没有更好或其他方法将 "descend"放入对象的 namespace ?

c++ - 重载的子类函数不能调用相似名称的父类

c - 如何防止在初始化数组时过度使用程序堆栈内存?

C 库的 C++ 包装器

c++ - 一个点绕另一个点旋转的函数

c++ - 使用虚函数 C++ 创建 Die 类

r - 通过最小化 R 中的方差对数据进行分组

ruby - Rails acts_as_paranoid 和 has_many :through