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

int array[]={1,2,3}
void a(int array[2]){}
void b(int array[]){}
void c(int (&array)[2]){}
以上都是以数组作为参数传递给函数a,b,c的。想了解以上三者的区别,希望各位老大详细解释,谢谢~~~

第1个回答  2007-08-17
我看了半天,觉得有问题,首先int array〔〕={1,2,3}是指定义一个数组array 这个数组有三个数分别为1,2,3.array〔0〕=1;array=〔1〕=2;array〔2〕=3;void a(int array[2]){} 是指定义一个函数a,没有返回值;而括号内是指参数是array[2],且是整型,但是前面是void 说明无返回值,那么函数a就不可能得到值,起的作用相当于一个计算过程,本身是得不到值的.
第2个回答  2007-08-17
问题:
int array[]={1,2,3}
void a(int array[2]){}
void b(int array[]){}
void c(int (&array)[2]){}

参数传递是一样的。
参数表中[2],这个2是可有可无的,即这个是没有区别的。
故a与b一样。
c中是C++中的引用。这是唯一的不同点。
第3个回答  2007-08-17
★★★★我来告诉你:
第一个是在某个函数(如主函数main(){})里定义一个整型数组{1,2,3},
而下面三个都是定义函数,
void a(int array[2]){} 表示将数组array的第三个变量3交给函数a(){}去处理,也可以说函数a(){}调用数组array的第三个变量3作为参数去执行;
void b(int array[]){} 表示将数组array的地址交给函数b(){}去处理,也可以说函数b(){}调用数组array的的地址作为参数去执行;
void c(int (&array)[2]){} 表示将数组array的第三个指针交给函数b(){}去处理,也可以说函数b(){}调用数组array的的第三个指针作为参数去执行;

void表示不返回任何值给函数
第4个回答  2007-08-17
三个的函数原型应该是:
//传递单个值
void a(int Num){}

//传递整个数组
void b(int Num[]){}

//传递一个地址(也差不多等于一个值,定义方法不一样而已)
void c(*Num){}
第5个回答  2007-08-17
传递单个值
void a(int Num){}

//传递整个数组
void b(int Num[]){}

//传递一个地址(也差不多等于一个值,定义方法不一样而已)
void c(*Num){}

void a(int array[2]){} 表示将数组array的第三个变量3交给函数a(){}去处理,也可以说函数a(){}调用数组array的第三个变量3作为参数去执行;
void b(int array[]){} 表示将数组array的地址交给函数b(){}去处理,也可以说函数b(){}调用数组array的的地址作为参数去执行;
void c(int (&array)[2]){} 表示将数组array的第三个指针交给函数b(){}去处理,也可以说函数b(){}调用数组array的的第三个指针作为参数去执行;

C语言数组作为形参实参的一些疑惑?
void fun(int arr[], int n);在函数定义的时候,形参int arr[]不是表示某个元素的值,而是告诉编译器第一个参数是一个数组指针,可以接收实参传过来的数组地址。实际上以上定义等价于下面的定义。1.数组里面带元素个数:void fun(int arr[常数], int n);这里的常数可以是任意正整数,实际上编译...

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

C语言中,数组名作为函数参数,属于什么传递,为什么?
属于地址传递,在函数里修改的话,将直接影响调用方的数值。这是因为数组名代表这个数组的首地址,不过是静态不可更改的而已。在函数里用引用[i]下标时,就是找到这个数组第i号元素的地址进行修改的。所以是第于是地址传递。

C语言中函数定义形参为数组时的问题
1.数组为参数传递的是数组首地址,而不是元素的值,而你说的a[size]仅仅是值,况且事实上也没有a[size]这个元素 2.既然是数组名的传递,当然需要由一个数组的参数来接收,int v[]”的问题是因为他是形式参数,是为了接收数组的 n的问题是因为,如果只传递了数组,但是函数并找不到数组的个数,所以需要...

C语言中,数组做函数参数如何才能按值传递?
传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。void func(int array[10])void func(int array[])void func(int *array)所以以上三种函数声明完全等同。实际情况是,数组做参数,完全无法按值传递。这是由C\/C++函数的实现机制决定的。下一个问题是:为什么偏要按值传递呢?当要...

关于c语言数组的一些疑惑?
而数组做形参时,只是把实参的首地址传给形参,后面对形参的元素的赋值和改写,直接对实参的数组元素进行了赋值和改写。在C语言中,array[10]有两种含义:①它指含有10个元素的数组array,如:int array[10];②它指数组array的第10号元素,如:array[10] =5;因此,对于使用数组array[10](这里,你...

c语言中数组名为函数实参的问题?
代码在编译时会出现 error C2664: 'InsertSort' : cannot convert parameter 1 from 'int' to 'int []'这是因为用数组名做函数实参时,向形参(数组名或指针变量)传递的是数组首元素地址,因此对参数的类型做一下改变,如下图所示:

关于C语言的二维数组作为函数参数的问题?
int arr[n][m];实际上相当于:int n=2,m=3;int (*arr)[m];所以,传递二维数组作为参数,实际上就是传递了一个指针。将形参的类型定义成int*,再在函数内部转换回指向数组的指针就行了,比如:void f(int *p,int row,int column){ int (*arr)[column]=(int (*)[column])p;\/\/使用...

C语言中,数组名作为函数参数,属于什么传递,为什么?
C语言中,数组名作为函数参数,属于数组参数传递。在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。数组型变量名本身只是该数组所占存储空间的首地址,函数调用时,系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储...

关于c语言中数组作为函数参数的函数之间调用问题
1、新建一个数组作为参数项目,如图所示:2、添加一个array.c文件,如图所示:3、包含stdio.h和stdlib.h头文件,如图所示:4、输入main函数主体及返回值,如图所示:5、定义一个数组arr,如图所示:6、定义一个function函数,如图所示:7、将数组作为参数传递给function函数,如图所示:8、运行程序,输出...

相似回答