当前位置:首页 » 编程语言 » c语言数组传递形参
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言数组传递形参

发布时间: 2022-05-22 15:45:08

1. 请问c语言将数组作为形参整么进行值传递是要用循环将地址一个个的传么

可以只传递一个参数,或两都参数都行...

一个参数的形式的话只传一个数组的首地址就行了,还有就是数组的个数可通过所传递的首地址来判断....
如字符数组,可通过判断是否为'\0'来判断已经到达结尾了!

当然也可加个参数,传递一个数组的个数,这样在函数里边好循环处理数据!

2. c语言 数组作为参数传递

调用时把【】去掉,表示掉用这个数组的所有元素,数组的名称表示数组第一个元素的地址。
数组的定义可以写成:
int
table[]={1,2,3,}
或者table[3],不能写成table[],因为系统在定义数组时就给数组分配了地址,table[]没有确定元素的个数,不能分配地址空间。
但是作为形参,可以这样写,void
tab(int
table[])
,不知道为什么,呵呵

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

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

4. C语言中如何将二维数组作为函数的参数传递

在c语言中可以用二维数组作为实参或者形参。
1、函数中用二维数组作为形参,函数声明中可以指定所有维数的大小,也可以省略第1维的维数如:
void f(int array[3][10]); //正确
void f(int array[][10]); //正确上面的两种二维数组形参表示都是正确的。
2、函数中用二维数组作为形参,不能把第2维或者更高维的大小省略,如下面的定义是不合法的:
void f(int array[][]); //错误

因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能只指定一维而不指定第二维,下面写法是错误的:

void f(int array[3][]); //错误 3、二维数组作为实参传递时,必须保证实参第2维的维数与形参第2维的维数相同,因为必须要保证形参和实参的数据类型一致。比如定义如下函数:
void f(int array[][10]);可以将如下数组传递给函数f。
int a[2][10] = {1,2,3,4};
int b[4][10] = {1};

5. C语言中,数组做函数参数如何才能按值传递

传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。

void func(int array[10])
void func(int array[])
void func(int *array)

所以以上三种函数声明完全等同。

实际情况是,数组做参数,完全无法按值传递。这是由C/C++函数的实现机制决定的。

下一个问题是:为什么偏要按值传递呢?当要在一个函数内使用一个数组时,传一个指针进去不就行了?只要能访问到我们所要的数据并对其进行操作,何苦钻牛角尖。

6. C语言数组作为形参实参的一些疑惑

void fun(int arr[], int n);

在函数定义的时候,形参int arr[]不是表示某个元素的值,而是告诉编译器第一个参数是一个数组指针,可以接收实参传过来的数组地址。

实际上以上定义等价于下面的定义。

1.数组里面带元素个数:

void fun(int arr[常数], int n);

这里的常数可以是任意正整数,实际上编译器是会忽略,因为这里只要告诉编译器我接收的是一个数组指针,至于它有多少个元素不关心,因为实参也只是传个地址过来。元素个数由参数二控制。至于为什么要这么约定可以看下面补充说明。

2.void fun(int *arr, int n);

使用指针,这种方式和题目中的方式是最常用的方式,第一种最不常用。

补充说明(为什么数组作为函数参数是传地址,而不是传每个元素):

设想一下,有一个函数如下

int fun(int nums[1000], int size)

它的参数一要处理1000多个元素的数组,如果是传值即每个元素,那在函数体内是不是就得再申请1000多个整数的内存,还需要把值从实参那里复制过来,这是非常耗时间的而且没有必要,因为在内存的某个块已经存放了这些数据。只要告诉放在哪个位置,你函数体去那里找就行了。这里说的就是传地址了,只需要传个数组首地址,然后告诉有多少个元素要处理就OK了。传地址只需要复制地址给形参,相对传每个元素快得多。

7. C语言 形参数组传递问题

假设定义的数组为整数数组。首先求平均数的函数有一个整形指针参数作为输入,然后在主函数调用求平均数函数的时候,该形参的值以a+2作为输入就可以了。(a+2为指向第三个数的整形指针指针)

8. C语言中,数组名作为函数参数,属于什么传递,为什么

C语言中,数组名作为函数参数,属于数组参数传递。在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。

数组型变量名本身只是该数组所占存储空间的首地址,函数调用时,系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储空间,此后,将实参数组的首地址传递给形参变量。

(8)c语言数组传递形参扩展阅读:

数组参数在传递时应注意以下两个方面:

1、 在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分隔。

2、被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界。

9. c语言怎么将数组作为函数参数传入

一维数组的元素作为函数实参,与同类型的简单变量作为实参一样,是单向的值传递,即数组元素的值传给形参,从而形参是改变不影响实参

数组名代表着整个数组的地址,如果一维数组的名字作为函数实参,传递的是整个数组,即形参数组和实参数组完全相同,是存放在同一存储空间的同一个数组。这样形参数组
修改时,实参数组也同时被修改了。形参数组的元素个数可以省略。
#include<stdio.h>

//数组作为函数参数,可以省略元素个数
//数组作为函数参数,传递是整个数组的地址,修改了函数形参数组元素的值,会影响到外面的实参数组
void change(int array[])
{
printf("array ==%p\n",array);

array[0] = 100;
}

int main()
{
int ages[6] = {10,11,13,15,11,18};

printf("array ==%p\n",ages);

change(ages);

printf("%d\n",ages[0]);

return 0;

}

输出结果为: array ==0x7fff5be26c00
array ==0x7fff5be26c00
100

10. 在c语言中的变量声明中,实参传递给形参用数组怎么表示

数组作为形参,传递的是能够代表一个维度的数组的数组名,也就是地址。所以形参只能是一维数组的形式(当然可以是用指针表示的)。而实参可以是一维数组,也可以使多为数组的某一维的数组名。下面是定义的两中普通函数的形式(假设传递的是整形的数组)
void
function(int
a[]){}
void
function(int
*
a){}