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

作者&投稿:狂尹 (若有异议请与网页底部的电邮联系)
在C语言中,数组作为参数,是怎样在函数之间传递的啊??~

数组作为参数是按地址传递的
数组名就是数组的首地址。因此在数组名作函数参数时所进行的传送只是地址的传送, 也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。

#include
void pick(char a[], int n, char new_a[])
{
int i;
int j = 0;
for ( i = 0; i < n; i++ )
if ( a[i] >= '0' && a[i] <= '9' )
new_a[j++] = a[i];
new_a[j] = '\0';
}
void main()
{
char a[60], i; // 由于字符串最后加了一个‘/0’,故要存五个字符,必须有六个空间, 要完成实例,则定义的大些,定义到60,则只要输入字符不超过59即可
/*for ( i = 0; i < 5; i++ )
scanf( "%c", &a[i] );*/
scanf( "%s", a ); //用%s 输入字符串更方便些

char new_a[60]; // 按要求,要把数字放到新串中,先定义一个新串
pick( a, 60, new_a );
/*for ( i = 0; new_a[i]; i++ )
printf( "%c", new_a[i] );*/
printf( "%s", new_a );
}
运行结果:
567adsfdsf87dasg7das8f9ds
56787789请按任意键继续. . .

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

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

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

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

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

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

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

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



这问题说明你对指针的运用还是不熟练的,既然是数组,作为函数参数传递的是数组首地址.
#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;
}

这问题说明你对指针的运用还是不熟练的,既然是数组,作为函数参数传递的是数组首地址.
#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;
}

函数在数组中的调用是以数组名为实参调用的,因为数组名就是数组的首地址,所以说对数组的调用是不需要返回值的,主调函数里面的数组值会随被调函数的形参数组改变而改变,当然这些都是在你以数组名作为实参的前提下

如果传递值是指针(地址),也就是数组名,虽然在子函数里面,但复制过去的是地址,所以可以对地址里面指向的内容进行操作,也就是一个子函数中可以实现对多个值的操作,如果传递的是内容,则至多通过return 进行一个返回值操作,总之,要看你传什么


关于c语言中的结构体数组作为函数参数传递的
1、结构体数组传给指针,实质上是不可能的,本质上传的是数组首地址,根据偏移来操作数组,这样看起来好像是真在操作数组一样。就和普通指针一样使用,只不过它是结构体数组。2、例程:typedef struct Student{ char name[10] ; int age ;}Student;#define LEN 10 \/\/print all Student infoma...

C语言中关于数组名作为函数参数方面的问题
不知道你说的第2,4,5语句对应的是什么。。。帮你解释为什么是1:当你调用fun(a,b,s);传进的参数实际上是:&a[0], &b[0], s变量的值(实际上也就是&a[0])现在我们把fun的形参换个名字 fun(int *p1, int *p2, int *p3)进入fun时 p3 = s ,即p3 = &a[0].你调用malloc时...

C语言中,指针数组作为主函数的形参整个过程怎么操作??以图片主函数为例...
对于主函数的参数, argc 和 argv可以说是在程序执行的时候传递的 其中:argc 指执行程序时命令参数的个数,argv 可以说是一个字符二级指针,也就是是字符串数组 如果执行命令如下:.\/a.out China BeiJing 则此时argc = 3;argv[0]的内容为 .\/a.out argv[1]的内容为 China argv[2]的内容为 ...

c语言数组的定义
C语言支持一维数组和多维数组。如果一个数组的所有元素都不是数组,那么该数组称为一维数组。在C语言中使用数组必须先进行定义,一维数组的定义方式为:类型说明符; 数组名 ;[常量表达式]。其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符,方括号中的常量表达式表示...

C语言编程中的Buf是什么意思啊
1、在C语言编程中一般用数组来表示一个缓冲区。如下:char buf[256] = {0}; \/\/定义一个数组作为缓冲区。2、C语言编译器生成程序后,每个程序自身的运行也需要缓冲区,一般叫做堆栈,它们的默认大小一般是1MB。3、如果数据超出了缓冲区的大小,即为溢出,在C语言中如果用户定义的数组在栈区,当...

C语言中如何定义数组
C语言中,同变量一样;数组也必须先定义后使用。一维数组的定义形式:类型标识符 数组名[常量表达式];例如int a[10]; 其中a为地址常量。如变量的定义一样,int a ;double a;float a等;数组的定义只是把后面的变量名改为数组名而已。int a[10]就是定义了一个数组名为a的数组;此数组有10...

在C语言中,一维数组的定义方式为:类型说明符数组名——
char b[259025]; ok。 char c[1036097]; 运行时错误,1036096是ok的。 } TC2.0 中 void main() { int a[32768]; 编译错误,32767是ok的。 char b[65536]; 编译错误,65535是ok的。 } C语言中,一维数组名到底是不是代表一个地址常在量? 数组一般都用作变量,但是当它...

c语言中字符数组中最后为什么必须为\\0?
c语言中字符数组并没有规定最后一个字符为'\\0',甚至可以不包含'\\0',添加'\\0'作为结束标志是针对于c语言对字符串的处理而言的,因此,字符数组中最后一个字必须为‘\\0’是错误的。C语言中没有字符串类型,字符串是存放在字符型数组中的。在C语言中,是将字符串作为字符数组来处理的。为了测定...

关于c语言 当实参是数组名 形参是指针变量时
在C语言,数组无论作为参数还是返回值,都是以指针形式返回或者传递的。在数组中,数组名字代表的是数组第1个元素的地址。比如如下数组。int a[10] = {1,2,3,4,5,6};数组名a,实际上相当于&a[0]。所以,当实参是数组名,形参是指针变量时,只要保证数据类型一致即可传递。如下面的示例代码:i...

c语言字符数组使用方法
即把10个字符分别赋给str[0]到str[9]10个元素 如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '\/0' )。2、字符数组与字符串 在c语言中,将字符串作为字符数组来处理。(c++中不是)在实际应用中人们...

科尔沁左翼后旗13140083081: c语言中,如何定义一个以数组为参数的函数,函数的功能是将数组中的每一个元素从小到大排列 -
唱俩安欣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33#include <stdio.h>voidsort(int*begin,int*end) {inti,j;intlength=end-begin;for(i=0;i<length;i++){for(j=0;j<length-i;j++){if(*(begin+j)>*(begin+j+1)){...

科尔沁左翼后旗13140083081: c语言中数组名作为函数参数 -
唱俩安欣: 要将数组长度作为一个参数传给average函数,不能在average函数内部通过int arrLen = sizeof(a) / 4;来计算数组长度.因为float average(float a[10])就相当于float average(float *a) ,所以sizeof(a)恒等于4,sizeof(a) / 4恒等于1.应该这样:float average(float a[10],int arrLen) { float sumSco = 0; for (int i = 0; i < arrLen; i++) { sumSco += a[i]; } return sumSco / arrLen; }

科尔沁左翼后旗13140083081: 在c语言中怎么将数组直接作为函数的参数 比如 int f(int a[10]) 在调用函数时会显示 -
唱俩安欣: 要把数组作为函数的参数,在函数定义的时候,就要在参数列表设置指针,因为数组名就是数组的头指针,在调用时直接把数组名作为函数的参数就好了 比如 int fun(int *a) {//... } int main() {int a[10];int result=fun(a);return 0; } 这样就好了 通...

科尔沁左翼后旗13140083081: C语言中如何将二维数组作为函数的参数传递 -
唱俩安欣: 在c语言中可以用二维数组作为实参或者形参. 1、函数中用二维数组作为形参,函数声明中可以指定所有维数的大小,也可以省略第1维的维数如:void f(int array[3][10]); //正确void f(int array[][10]); //正确上面的两种二维数组形参表示都是正...

科尔沁左翼后旗13140083081: C语言 数组做参数 -
唱俩安欣:#include void fun(int a[10]) {int t,i;for(i=0;i<5;i++){t=a[i];a[i] = a[5+i];a[5+i] = t;} }void main( ){int c[10]={1,2,3,4,5,6,7,8,9,10},i;fun(c);for(i=0;i<10;i++)printf("%d,",c[i]);printf("\n");}

科尔沁左翼后旗13140083081: c语言编程:用数组名作函数参数,编写一个对一维数组求平均值的函数,并在主函数中调用它 -
唱俩安欣: #include <stdio.h>#include <stdlib.h>#include <string.h> float b(float arr[],int n); //<<<<少了函数声明 void main() { float a[50]; int i,n=0; for(i=0;getchar()!='\n';i++) { scanf("%f",&a[i]); n++; } printf("平均值是:%f",b(a,n) ); //<<<<b这个函数...

科尔沁左翼后旗13140083081: C语言中关于数组名作为函数参数方面的问题 -
唱俩安欣: 不知道你说的第2,4,5语句对应的是什么....帮你解释为什么是1:1. 当你调用fun(a,b,s); 传进的参数实际上是:&a[0], &b[0], s变量的值(实际上也就是&a[0])2. 现在我们把fun的形参换个名字 fun(int *p1, int *p2, int *p3) 进入fun时 p3 = s ,即p...

科尔沁左翼后旗13140083081: C语言数组作为参数 -
唱俩安欣: int Arrage(int iArrage[10])这个函数的参数是iArrage,这是一个int型指针,所以要传一个int型指针进去,比如main函数中的iStudent就是个int型指针

科尔沁左翼后旗13140083081: 关于在C语言 声明带有一个变长数组参数的函数 -
唱俩安欣: 在C语言中,函数中要用数组做参数,可以采用三种方式,其中后两种均可适用于变长数组参数.1 直接以定长数组做参数,声明形式为:ret_type func(int a[100]); 这里就是以100个元素的数组做参数的.2 声明时不带长度,即:ret_type func(int a[]);3 以指针替代数组,即:ret_type func(int *a);2,3两种均可以用于变长数组.不过这种情况下,需要与函数约定数组长度的确定方法,比如约定规模 ,约定结束值,增加额外参数传长度,在数组元素中包含长度,或采用全局变量传长度等等.

科尔沁左翼后旗13140083081: c语言中怎么用二维数组作为函数参数 -
唱俩安欣: 很简单的,数组作为函数参数传递的时候只要是数组名就可以了,因为数组名本身就是数组的首地址 .给个程序看看 #include<stdio.h> #define N 3 int array[N][N]; void main() { //在主函数内声明被调函数 void convert(int array[][3]); int i,j; printf(...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网