关于c语言中数组作为函数参数的函数之间调用问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于c语言中数组作为函数参数的函数之间调用问题相关的知识,希望对你有一定的参考价值。

比如,在main函数中定义了一个int array[3]; 不赋初值
再写两个子函数,假如在第一个子函数中给数组赋值,在第二个子函数中用这个数组中的值做计算,就假设是在这里定义另一个数组 做 s[i]=array[i] *i;的操作好了。
……fun1 (……)

……

……fun2 (……)

for(i=0,i<n;i++)
s[i]=array[i] *i;
……

main()

……//fun1调用
……//fun2调用


我假设的问题有没有意义不重要,也不是要其他什么简便方法,我就是想知道这样关于数组在函数之间的调用是怎么处理的,返回值是怎么样的。可以的话给我一个完整的参考代码,谢谢~~~

1、新建一个数组作为参数项目,如图所示:

2、添加一个array.c文件,如图所示:

3、包含stdio.h和stdlib.h头文件,如图所示:

4、输入main函数主体及返回值,如图所示:

5、定义一个数组arr,如图所示:

6、定义一个function函数,如图所示:

7、将数组作为参数传递给function函数,如图所示:

8、运行程序,输出结果,如图所示:

参考技术A 这问题说明你对指针的运用还是不熟练的,既然是数组,作为函数参数传递的是数组首地址.
#include <stdio.h>
#include <stdlib.h>
void func1(int *array, int size)
int i,temp;
for (i=0;i<size;i++)
scanf("%d",&temp); //利用scanf输入赋值
array[i]=temp;


//数组array_b根据数组array_a的元素乘以项数获得元素值
void func2(int *array_a,int *array_b, int size)
int i;
for (i=0;i<size;i++)
array_b[i]=array_a[i] * i;

//输出数组元素
void print(int *array, int size)
int i;
for (i=0;i<size;i++)
printf("%d ",array[i]);
printf("\n");


int main(void)
int size; //数组大小
int i;
int *array_a, *array_b; //声明数组array_a,array_b
scanf("%d", &size);
array_a=malloc(sizeof(int) * size);
array_b=malloc(sizeof(int) * size);
func1(array_a, size);
func2(array_a, array_b, size);
print(array_a,size);
print(array_b,size);
return 0;
本回答被提问者采纳
参考技术B 这问题说明你对指针的运用还是不熟练的,既然是数组,作为函数参数传递的是数组首地址.
#include
<stdio.h>
#include
<stdlib.h>
void
func1(int
*array,
int
size)

int
i,temp;
for
(i=0;i<size;i++)

scanf("%d",&temp);
//利用scanf输入赋值
array[i]=temp;


//数组array_b根据数组array_a的元素乘以项数获得元素值
void
func2(int
*array_a,int
*array_b,
int
size)

int
i;
for
(i=0;i<size;i++)
array_b[i]=array_a[i]
*
i;

//输出数组元素
void
print(int
*array,
int
size)

int
i;
for
(i=0;i<size;i++)
printf("%d
",array[i]);
printf("\n");

int
main(void)

int
size;
//数组大小
int
i;
int
*array_a,
*array_b;
//声明数组array_a,array_b
scanf("%d",
&size);
array_a=malloc(sizeof(int)
*
size);
array_b=malloc(sizeof(int)
*
size);
func1(array_a,
size);
func2(array_a,
array_b,
size);
print(array_a,size);
print(array_b,size);
return
0;
参考技术C 函数在数组中的调用是以数组名为实参调用的,因为数组名就是数组的首地址,所以说对数组的调用是不需要返回值的,主调函数里面的数组值会随被调函数的形参数组改变而改变,当然这些都是在你以数组名作为实参的前提下 参考技术D 如果传递值是指针(地址),也就是数组名,虽然在子函数里面,但复制过去的是地址,所以可以对地址里面指向的内容进行操作,也就是一个子函数中可以实现对多个值的操作,如果传递的是内容,则至多通过return 进行一个返回值操作,总之,要看你传什么

c语言向函数传递函数作为参数

举个例子说吧,用话说不太明白,比如
int a()
int value = 1;
return value;

int b(int target)
return target;

可不可以,或者有什么把法可以直接将函数int a()传递到函数b中呢?

#include <stdio.h>
//---子函数声明---// 
int func1();
int func2(int (*func1)());        //形参为函数指针(即指向函数的指针) 
//---主函数---// 
int main()
    printf("向函数二传递函数一,\\n即函数一作为函数二的参数。\\n");
    printf("%d ",func1());
    printf("%d\\n",func2(func1));//注意函数名即为函数地址!!!!!! 
                                //实参为函数名func1或者&func1,两者等价,而非func1() 
//---子函数定义---// 
int func1()
    return 1;


int func2(int (*func1)())        //形参为函数指针(即指向函数的指针)
    return func1()+1;

参考技术A 将b函数中的return target直接改成return a()就可以获得a函数中的value值了,有什么问题还可以问我!我会尽力帮你~追问

我问的不是这个意思哦,我想问的是如何将a()函数作为一个参数传递给b()函数

参考技术B int a()
int value = 1;
return value;

int b(int (*f)())
return target;

void main()

b(a); //将函数a传递到b中
参考技术C 使用函数指针。如下:
#include<stdio.h>

int a()

int value = 1;
return value;

int b(int (*a)())

return a();


void main()

b(a);
本回答被提问者采纳
参考技术D 复制一下楼上的 稍稍改动

#include<stdio.h>

int a()

int value = 1;
return value;

int b(int target)

return target;


void main()

b(a());

以上是关于关于c语言中数组作为函数参数的函数之间调用问题的主要内容,如果未能解决你的问题,请参考以下文章

关于C语言中数组作为参数传递的疑惑~~

c语言中关于结构体 调用函数的问题 新手求教

c语言中怎么用二维数组作为函数参数

在C语言中,定义一个函数的形参和实参之间具体是如何进行参数传递的?

c语言向函数传递函数作为参数

c语言中怎么用二维数组作为函数参数