c语言函数调用数组
① c语言,如何在子函数中写一个3*3二维数组,给主函数调用!!
在子函数申请二维数组,主函数使用,可以用动态申请。
方法不止一种,我这里用指针的指针实现二维数组。
二维数组除了行列,本身地址也是连续的,从第一行第一列的元素地址++,可以取出所有元素。所以我这里先申请了完整的连续地址。
#include<stdio.h>
#include<malloc.h>
int**sr(void)
{
inti,j;
int*memory=(int*)malloc(sizeof(int)*9);//申请完整的连续内存地址3*3
int**arr=(int**)malloc(sizeof(int*)*3);//申请二维数组行指针数组(也就是二维数组)
if(!memory||!arr){
printf("内存申请错误!
");returnNULL;}
for(i=0,j=0;i<9;i+=3)//将连续地址按列数,取出每行首地址,赋值给二维数组元素
arr[j++]=&memory[i];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&arr[i][j]);
returnarr;
}
intmain(void)
{
inti,j,**arr=sr();
if(!arr)
return1;
printf("---主函数调用子函数定义的二维数组---
");
for(i=0;i<3;i++,printf("
"))
for(j=0;j<3;j++)
printf("%d",arr[i][j]);
printf("
---实现二维数组地址连续性---
");
int*p=&arr[0][0];
while(p<=&arr[2][2])
printf("%d",*p++);
return0;
}
② 在C语言中怎么将子函数中的数组和函数调用出来
来传送子函数中的数组有多种方法——可以通过函数返回值返回地址传递数组;也可以通过函数输入参数来传递数组;还可以通过全局变量来传递数组。
子函数本身可以直接在作用域中进行调用。
1、通过函数返回值返回地址传递数组。
声明函数时需要声明函数返回值类型为对应数组的地址,此时可以返回数组的地址,结合数组元素的地址关系可以传递整个数组,同时可以根据数组的特性传递多个参数。
注意:子函数是C语言模块化编程思想的核心,其方法是通过输入接口和输出接口实现对黑盒的调用,故对其内部数据的输入和调用也需要通过输入接口、输出接口和程序的公共区域实现。
③ C语言函数调用关于数组的返回
不用返回了,你这里函数里直接对数组元素进行操作,调用完之后a就是排好的
#include<stdio.h>
main()
{
int
a[count];
……;
order(a,count);//在这个地方调用排序(地方一)
……
}
void
order(int
a[],int
count)
//数组按从小到大排序
{
int
i,j,x;
for(i=0;i<count;i++)
for(j=i+1;j<count;j++)
if(a[i]<a[j])
{
x=a[i];
a[i]=wa[j];
a[j]=x;
}
}
④ C语言中函数调用数组的问题
#include <stdio.h>
void Read(int A[]);
main()
{
int i,j,A[6];
for(i=0;i<6;i++)
{
A[i]=1;
}
Read(A);
while(1);
}
void Read(int A[])
{
int i,j;
for(i=0;i<6;i++)
{
printf("%d\n%d\n",A[i],i);
}
}
你把程序改成这样就行了,不用加什么头文件了吧,不是已经有一个#include<stdio.h>了吗
⑤ C语言调用带数组的函数为什么要这么写
首先int max(int a[])这个函数参数的意思是接受一个数组的首地址,也就是说调用的时候必须是地址,也可以说是指针;
如果调用写成max(a[10]),这里面a[10]为第十一个元素的值当然不行了,除非你就是把地址放在里面了,强制有的编译器应该可以通过但是会有警告。
其实理解了的话max(a)和max(&a[0])都是可以的,都表示把数组a的首地址传过去。
可以多去了解一下指针,多上机操作,多练练就会理解的越深。
⑥ c语言二维数组怎么用函数一个一个调用,这样对吗
对的,是我的第二种方法。
1.可以用指针。
void Func(int **array, int m, int n);
在转变后的函数中,array[i][j]这样的式子是不对的(不信,大家可以试一下),因为编译器不能正确的为它寻址,所以我们需要模仿编译器的行为把array[i][j]这样的式子手工转变为:
*((int*)array + n*i + j);
2.可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:
void Func(int array[3][10]);
void Func(int array[][10]);
二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:
void Func(int array[][]);
因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多 少列,不能只指定一维而不指定第二维,下面写法是错误的:
void Func(int array[3][]);
实参数组维数可以大于形参数组,例如实参数组定义为:
void Func(int array[3][10]);
而形参数组定义为:
int array[5][10];
这时形参数组只取实参数组的一部分,其余部分不起作用。
⑦ 关于c语言中数组作为函数参数的函数之间调用问题
1、新建一个数组作为参数项目,如图所示:
⑧ C语言的函数调用和数组,eg:void abd(int arr[])
函数返回值类型:(void)也就是不需要返回值。
函数名:abd
函数参数:int型数组
这里调用的时候,需要给函数abd一个参数,可以是数组名,也可以是一个指向int数组的指针。
注意数组参数为数组,是传址,也就是说如果abd函数对arr形参操作会改变外部函数实参的值。