c语言数组函数形参 C语言数组形参

c语言中 数组实参和形参的设置。

例如:你自己定义一个函数

成都创新互联公司是专业的融安网站建设公司,融安接单;提供成都网站制作、网站建设、外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行融安网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

int

max(int

a,int

b){...

}

在这里a,b就是形参,接下来你会调用max函数,如:

void

main()

{

int

c,int

d;

.....

max(c,d);

}

这里c

d就是实参

所谓形参就是在函数定义体中的参数

所谓实参就是在调用函数时实际传进函数的参数

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了。传地址只需要复制地址给形参,相对传每个元素快得多。

C语言中用数组做为形参为什么形参改变时实参也要变??

c语言中数组名作为实参传给被调用的函数时,形参获得的是数组的起始地址。

还是用例子说话吧。

#include

int

*arry(int

*a)

{

int

*b;

b

=

a;

int

i;

for(i=0;i5;i++)

{

printf("%d",a[i]);

}

return

b;

}

int

main()

{

int

a[5]

=

{1,2,3,4,5};

int

*c;

int

i;

c

=

arry(a);

for(i=0;i5;i++)

{

printf("%d",c[i]);

}

}

主要是通过指针把数组,例如main里面的a的地址传入arry函数,然后在arry函数中用一个兼容类型的指针接收地址,然后就可以再这个指针下的地址操作地址上面的数据了。

arry返回的时候也是返回一个指针(地址)。


当前标题:c语言数组函数形参 C语言数组形参
网页路径:http://myzitong.com/article/docdcci.html