c - 为什么在函数中更改数组会影响原始数组?

标签 c arrays pointers

<分区>

为什么我在 selection_sort 函数中应用到 a[] 的更改也会应用到 main 中的 series[] 功能?谁能给我解释一下?

#include <stdio.h>
#define NUMS 8

void selection_sort(int a[], int n);

int main(void)
{

    int i, series[NUMS];

    printf("\nEnter %d numbers: ", NUMS);
    for (i = 0; i < NUMS; i++)
        scanf("%d", &series[i]);

    selection_sort(series, NUMS);

    printf("Sorted: ");
    for (i = 0; i < NUMS; i++)
        printf("%d ", series[i]);
    printf("\n\n");

    return 0;
}

void selection_sort(int a[], int n)
{

    if (n == 0) return;

    int i, li = 0;

    for (i = 1; i < n; i++)
        if (a[i] > a[li])
            li = i;

    i = a[n-1];
    a[n-1] = a[li];
    a[li] = i;
    selection_sort(a, n - 1);
}

我希望 a[] 数组中的更改不会干扰 series[] 中的元素。但这让我很困惑。

最佳答案

您的元素正在被操纵,因为当您将数组传递给函数时,该数组被视为指向数组基址的指针,因此可以操纵您的元素

关于c - 为什么在函数中更改数组会影响原始数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57652189/

相关文章:

c - 在 Centos 7 的 libgcrypt 中找不到宏

javascript - Cypress> 在对象数组中查找文本> 无法定位文本 :TypeError: $e1. find.contains 不是函数

php - 为什么 $_GET 变量会覆盖整个数组?

C++ 二维动态数组分配

c - gcc:从硬件寄存器读取时 '-fno-strict-aliasing' 的奇怪行为

从文本文件创建 C 线程

c - 对指针的修改改变了输出

c - 重新分配数组的行和列

c# - C# 中的 C 回调函数问题 - 如何将值传递给指针?

java - 随机数组重复