在C语言中,数组作为参数,是怎样在函数之间传递的啊??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C语言中,数组作为参数,是怎样在函数之间传递的啊??相关的知识,希望对你有一定的参考价值。

哪位大神能够解释得详细点吗??越详细越还好........
额,这个我们还没学到指针的,能讲得通俗易懂点吗??

数组作为参数是按地址传递的
数组名就是数组的首地址。因此在数组名作函数参数时所进行的传送只是地址的传送, 也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。
参考技术A 函数里写明数组类型,数组名再加中括号就行了,但同时最好写上数组里的元素个数;要么直接用指针(你没学就不说了)!
如 int fun(int a[],int n); //声明一个函数,传入一个a数组,n代表行标
调用 fun(a,n)就行了;
怎样??懂了吧!!
参考技术B 很简单的,数组作为函数参数传递的时候只要是数组名就可以了,因为数组名本身就是数组的首地址 .给个程序看看

#include<stdio.h>
#define N 3
int array[N][N];
void main()

//在主函数内声明被调函数
void convert(int array[][3]);
int i,j;
printf("输入数组:\n");
for(j=0;j<N;j++)
for(i=0;i<N;i++)
scanf("%d",&array[i][j]);
printf("\n");
for(j=0;j<N;j++)

for(i=0;i<N;i++)
printf("%d\t",array[i][j]);
printf("\n");

//调用矩阵转置函数
convert(array);
printf("\n");
for(i=0;i<N;i++)

for(j=0;j<N;j++)
printf("%d\t",array[i][j]);
printf("\n");


void convert(int array[][3])

int i,j,t;
for(i=0;i<N;i++)
for(j=0;j<N;j++)//设置数组中转置矩阵元素交换

t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;

参考技术C 很简单的,数组作为函数参数传递的时候只要是数组名就可以了,因为数组名本身就是数组的首地址 .给个程序看看

#include<stdio.h>
#define N 3
int array[N][N];
void main()

//在主函数内声明被调函数
void convert(int array[][3]);
int i,j;
printf("输入数组:\n");
for(j=0;j<N;j++)
for(i=0;i<N;i++)
scanf("%d",&array[i][j]);
printf("\n");
for(j=0;j<N;j++)

for(i=0;i<N;i++)
printf("%d\t",array[i][j]);
printf("\n");

//调用矩阵转置函数
convert(array);
printf("\n");
for(i=0;i<N;i++)

for(j=0;j<N;j++)
printf("%d\t",array[i][j]);
printf("\n");


void convert(int array[][3])

int i,j,t;
for(i=0;i<N;i++)
for(j=0;j<N;j++)//设置数组中转置矩阵元素交换

t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;

参考技术D 取数组首地址做地址传递,如要传送int a[10],可以在函数中写,fun(int *a)

java数组作为参数传入函数怎么让他不变化

您不能使数组的元素不变。但是方法中也可用来传递和返回数组。如果要向方法中传递一个数组,则方法的接收参数处必须是符合其类型的数组。而且数组属于引用数据类型,所以在把数组传递进方法之后,如果方法对数组本身做了任何修改,修改结果都是会保存下来的。
向方法中传递数组
在java中,所有对象都是通过引用进行操作的。而数组也是一种对象,当把数组作为参数传递给方法时,传递的实际上就是数组对象的引用。在方法中对数组的所有操作,都会映射到原数组中。而所谓的"引用",就是java对象在堆内存的地址赋给了多个"栈内存"的变量既然方法可以接收一个数组,那么方法也就可以返回一个数组,则此时,只需要在返回值类型声明处明确的写出返回的数组类型即可。
数组可以作为方法的参数。
当调用方法的时候,向方法的小括号进行传参,传递进去的其实是数组的地址值返回值类型:只是进行打印而已,不需要进行计算,也没有结果,用void

但是java.util.Collections类的unmodifiableList()方法接受List接口的一个对象(实现其类的对象),并返回给定对象的不可修改形式。用户仅对获得的列表具有只读访问权限。

ArrayList类的asList()方法接受一个数组并返回一个List对象。

因此,要转换一个不可变的数组-获得所需的数组。

使用asList()方法将其转换为列表对象。首先给出结论:Java 程序设计语言对对象采用的不是引用调用,实际上,对象引用是按值传递的。(出自java核心技术卷一,第4章对象与类)

在刷leetcode时看到这样一道题:

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。在编程语言中调用函数时的参数传递分为值传递和引用传递,在学习Java的时候一般会见过这样一句话:基本数据类型使用值传递、对象使用引用传递。
对于值传递自然好说,传入方法的是变量的值,拥有可变参数的方法可以被重载,在调用方法的时候,如果能够和固定参数的方法匹配,也能够与可变长参数的方法匹配,则选择固定参数的方法。一个方法只能有一个可变长参数,并且这个可变长参数必须是该方法的最后一个参数编译器虽然知道怎么调用,但人容易陷入调用的陷阱及误区第一个能编译通过,这是为什么呢?事实上,base对象把子类对象sub做了向上转型,形参列表是由父类决定的,当然能通过。再看看子类直接调用的情况,这时编译器看到子类覆写了父类的print方法,因此肯定使用子类重新定义的print方法,尽管参数列表不匹配也不会跑到父类再去匹配下,因为找到了就不再找了,因此有了类型不匹配的错误。
这是个特例,重写的方法参数列表与父类不相同,这违背了重写的定义,并且会引发莫名其妙的错误。在这里,我们再复习下重写必须满足的条件:
1)重写方法不能缩小访问权限;
2)参数列表必须与被重写方法相同(包括显示形式);
3)返回类型必须与被重写方法的相同或是其子类;
4)重写方法不能抛出新的异常,或者超过了父类范围的异常,但是可以抛出更少、更有限的异常,或者不抛出异常。
参考技术A 当将Java数组作为参数传入函数时,可以使用引用传递的方式来避免数组的变化。这样,当函数改变数组时,原始数组也会发生变化。如果需要避免原始数组被改变,可以使用数组的复制,即使用另一个数组变量接收原始数组参数,这样即可避免原始数组被改变。 参考技术B 在Java中,将数组作为参数传入函数并且不想被改变,可以使用CLONE方法来实现:首先在函数编写中接收一个Object类型的参数,然后调用array.clone()方法将参数对象进行克隆复制,生成一个新的数组对象,对它进行操作,而原来的数组参数不受影响。 参考技术C 在Java中,如果想要传入一个数组,而不改变该数组的内容,则可以使用引用传递的方式将数组传入函数。这种方式无论调用函数前数组中的元素是什么值,都不会发生任何改变。 参考技术D Java中如果希望数组作为参数时不被改变,那么可以将该参数定义为final类型,这样就可以保证数组在函数中不发生改变。

以上是关于在C语言中,数组作为参数,是怎样在函数之间传递的啊??的主要内容,如果未能解决你的问题,请参考以下文章

C语言中,结构体作为函数参数传递,详解?

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

C语言中,数组名作为函数参数,属于啥传递,为啥?

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

在C语言中参数是如何传递的?

C语言函数传递二维数组