c语言中数组函数形参实参 c语言数组形参和实参

数组作为实参和形参的形式是怎样的?两者都可以,可以用下面的程序展示 。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void sortArray(int *a, int num)
//void sortArray(int a[], int num)
{
for (int i = 0; inum; i)
{
for (int j = i1; jnum; j)
{
if (a[i]a[j])
{
int tem = a[i];
a[i] = a[j];
a[j] = tem;
}
}
}
}
void printfArray(int *a, int num)
//void printfArray(int a[], int num)
{
for (int i = 0; inum; i)
{
printf("%d\t", a[i]);
}
printf("\n\n");
}
/*
1、数组作为参数时,本质是指针,这是C语言的特点
2、数组作为参数时,里面的数字有误均可,对程序不影响
*/
void main()
{
int a[] = { 1, 2, 4, 5, 2, 53, 536, 263, 726, 37, 3 };
int num = sizeof(a) / sizeof(a[0]);
printf("数组排序前打?。篭n");
printfArray(a, num);
//开始对数组进行排序
sortArray(a, num);
printf("数组排序后打印:\n");
printfArray(a, num);
system("pause");
}
扩展资料:
用数组名作函数参数与用数组元素作实参有几点不同 。
1、用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的 。
2、在普通变量或下标变量作函数参数时 , 形参变量和实参变量是由编译系统分配的两个不同的内存单元 。在函数调用时发生的值传送是把实参变量的值赋予形参变量 。在用数组名作函数参数时,不是进行值的传送,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素 。
因为实际上形参数组并不存在,编译系统不为形参数组分配内存 。那么,数据的传送是如何实现的呢?在我们曾介绍过,数组名就是数组的首地址 。
因此在数组名作函数参数时所进行的传送只是地址的传送,也就是说把实参数组的首地址赋予形参数组名 。形参数组名取得该首地址之后 , 也就等于有了实在的数组 。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间 。
注意:
数组有两个特殊的性质 。一是不能复制数组;二是使用数组名字时,数组会自动转化为指向其第一个元素的指针 。由于数组不能复制,所以无法编写使用数组类型形参的函数,因为数组会被自动转化为指针 。
C语言中用数组做为形参为什么形参改变时实参也要变??c语言中数组名作为实参传给被调用c语言中数组函数形参实参的函数时c语言中数组函数形参实参,形参获得的是数组的起始地址 。
还是用例子说话吧 。
#include
int
*arry(int
*a)
{
int
*b;
b
=
a;
int
i;
for(i=0;i5;i)
{
【c语言中数组函数形参实参 c语言数组形参和实参】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]);
}
}
主要是通过指针把数组c语言中数组函数形参实参,例如main里面的a的地址传入arry函数,然后在arry函数中用一个兼容类型的指针接收地址,然后就可以再这个指针下的地址操作地址上面的数据了 。
arry返回的时候也是返回一个指针(地址) 。
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语言中什么是形参,什么是实参?例如:你自己定义一个函数
int
max(int
a,int
b){...
}
在这里a,b就是形参,接下来你会调用max函数,如:
void
main()
{
int
c,int
d;
.....
max(c,d);
}
这里c
d就是实参
所谓形参就是在函数定义体中的参数
所谓实参就是在调用函数时实际传进函数的参数
关于c语言中数组函数形参实参和c语言数组形参和实参的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读