echo_chenchen 2022-09-07 22:03 采纳率: 80.2%
浏览 26
已结题

为什么在定义函数时重新初始化参数会导致数组中参数值改变

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>;
void minmax(int* min, int* max, int a[], int len);
int main(void)
{
int min, max;
int a[] = { 1,3,4,5,7,2,8,9,66,33, };
minmax(&min, &max, a, sizeof(a) / sizeof(a[0]));
printf("min=%d,max=%d", min, max);
printf("a[0]=%d", a[0]);
printf("a[2]=%d", a[2]);
return 0;

}
void minmax(int* min, int* max, int a[], int len)
{
int i;
*min = *max = a[0]=0;//连等初始化会改变数组中参数值
a[2]=9;//单独不会

for (i = 1;i < len; i++)
{
    if (a[i]>*max)
        *max=a[i];
    if (a[i] < *min)
        *min = a[i];
}

}
//如果在函数单独初始化a【0】
并不会改变参数值,
连等初始化则会改变值,原因是什么呢?

  • 写回答

3条回答 默认 最新

  • 私房菜 优质创作者: 移动开发技术领域 2022-09-08 09:01
    关注

    那是因为你搞错了数组传参的概念了,你把 int a[] 改成int *a 试试呢?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月16日
  • 已采纳回答 9月8日
  • 创建了问题 9月7日