吴贤炬 发表于 2021-12-12 10:58:04

求解,还不太清楚数组作为函数参数

求解,array_input(a, n)传递的是数组a,那这个参数a不应该就是array_input()的局部变量吗?为什么参数a存放的值还可以存放到数组a里面?

#include<stdio.h>
#define NUM 6
void array_input(int a[], int n);
int square_sum(int a[], int n);
int main()
{
    int a, n = NUM;
    printf("请输入整型数组的%d个元素:\n", NUM);
    array_input(a, n);
    printf("数组a的各元素平方和:%d", square_sum(a, n));
    return 0;
}
void array_input(int a[], int n)
{
    int i;
    for (i = 0; i < NUM; i++)
      scanf("%d", &a);
}
int square_sum(int a[], int n)
{
    int i, sum = 0;
    for (i = 0; i < NUM; i++)
      sum += a * a;
    return sum;
}

傻眼貓咪 发表于 2021-12-12 11:08:34

大哥,因为你传入的参数是指针(数组),例子:#include <stdio.h>

void func(int *n){
    *n = 13;
}

int main()
{
    int n = 7;
    func(&n);
    printf("%d", n);
    return 0;
}输出结果:13

番杰 发表于 2021-12-13 17:50:46

array_input(int a[], int n)中的a是局部变量没错,
但你这个问题的迷惑性,在于main函数中定义了同名的数组a;
你要注意这两个同名的数组a,代表的意思不同;

在array_input(int a[], int n)中的a是局部变量没错,同时它也是一个形式参数;
而在main函数中通用array_input(a, n);这里的a,实际上就是在main中定义的数组,
跟你想像中的不是一个,它才是实际参数,所以可以对它进行修改。

另外,你可能会问,为啥会有两个同名名字的变量,这不是重复定义啦了吗?
当然不是,就像你说的在array_input()子函数中数组a是的局部变量,
它的生存周期只有在这个子函数中,
而mian函数中的数组a的生存周期跟它不同,所以并无影响。
若是听不太懂,也没关系,小甲鱼后面会讲到的。
页: [1]
查看完整版本: 求解,还不太清楚数组作为函数参数