数组在函数中调用时被修改,而不是int

时间:2018-11-24 05:55:32

标签: c arrays function

当我运行此程序时-

#include <stdio.h>
void inc( int num[], int n)
{
  int i;
  n++;
  for(i=0;i<10;i++)
    num[i]++;
}

int main()
{
  int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
  int a=2;
  inc (arr, a);
  int i; 
  for(i=0;i<10;i++)
    printf("%d  ", arr[i]); 
  printf("\n%d  ", a);
return 0;
}

我得到了输出-

2  3  4  5  6  7  8  9  10  1                                                                                                                  
2

我理解为什么int不变,但是我不理解为什么数组被更改,因为我没有使用指针来调用数组。我知道该函数将制作n的另一个副本并分配n = a,并且所有更改将仅发生在n上,而a将保持不变。为什么要更改数组?

1 个答案:

答案 0 :(得分:0)

在C语言中,除了few cases之外,数组名称会衰减(=隐式转换)为指向其第一个元素的指针。

void inc(int num[], int n)

与此完全相同:

void inc(int *num, int n)