数组作为实参和形参的形式是怎样的?

形参的形式:数组名()
那数组作为实参放在函数里,是以数组名表示还是以数组名加()表示,还是两者都行?

两者都可以,可以用下面的程序展示。

#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; i < num; i++)

{

for (int j = i + 1; j < num; 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; i < num; 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、在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。在用数组名作函数参数时,不是进行值的传送,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素。

因为实际上形参数组并不存在,编译系统不为形参数组分配内存。那么,数据的传送是如何实现的呢?在我们曾介绍过,数组名就是数组的首地址。

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

注意:

数组有两个特殊的性质。一是不能复制数组;二是使用数组名字时,数组会自动转化为指向其第一个元素的指针。由于数组不能复制,所以无法编写使用数组类型形参的函数,因为数组会被自动转化为指针。




温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-27
写个例子去理解一下吧:
#include <stdio.h>
void test( int aiNum[] , int len ) //形参 ,也可以这样:void test( int *aiNum , int len )
{
int i;
for( i=0;i<len;i++)
printf( "num[%d]=%d\n" , aiNum[i] );
}
int main( void )
{
int aiN[5]={1,2,3,4,5};
test( ai , 5 ); //实参:数组名,目的是将数组的首地址传给test函数
return 0;
}本回答被提问者采纳

数组做函数的实参和形参时分别该怎么写
数组名的本质是地址,也就是指针,如果要让数组名作为形参,必须写成(int array[])的形式,或者(int * array)。

c语言中数组名为函数实参的问题?
这是因为用数组名做函数实参时,向形参(数组名或指针变量)传递的是数组首元素地址,因此对参数的类型做一下改变,如下图所示:

如果实参是一维数组,则形参应该是一个一维数组或者一个指针变量 这句话...
当实参为数组时,形参不管是数组还是指针变量,形参共用的是实参的数据,也就是说,实参数组在内存中放着的数据,形参这块儿直接拿过来用,有点像C++中的引用类型。这个时候通过形参改变的是内存中的数据,也就会影响到实际参数中的数据。说的有点乱,多多包涵!

若用数组名作为函数的实参,传递给形参的是什么?
数组首地址数组第一个元素的地址。数组名字本身就是一个指针,它是一个指针常量,指向的地址不变。比如定义了一个数组变量,编译器就会在内存中划分了一块地址空间给它,数组名这个指针常量就指向了这块内存空间的首地址。形参和实参的区别 1、英文名字不同:形参是parameter,实参是argument。2、本质不同...

数组作为函数参数怎么用C++
数组名就是数组的首地址,实参向形参传送数组名实际上就是传送数组的地址,形参得到该地址后也指向同一数组。这就好象同一件物品有两个彼此不同的名称一样。同样,指针变量的值也是地址,数组指针变量的值即为数组的首地址,当然也可作为函数的参数使用。归纳起来,如果有一个实参数组,想在函数中改变此...

函数中,实参与形参的数据传递方式是?
数据传递方式有值传递和引用传递,值传递:传值,实际是把实参的值赋值给行参,相当于copy。那么对行参的修改,不会影响实参的值 。引用传递: 实际是传值的一种特殊方式,只是他传递的是地址,不是普通的赋值,那么传地址以后,实参和行参都指向同一个对象,因此对形参的修改会影响到实参。

c语言中形参和实参是什么意思?有什么区别?
实际参数与形式参数的参数个数、类型和顺序都应一样,如果不一样的话,系统会强制转换,这样会造成数据的丢失。实 参向形参的传递是值的传递。\\x0d\\x0a\\x0d\\x0a这个值就是对实参的表达式进行计算的结果,它可以是常量值、变量值、数组元素、函数值等。如果实参是数组名了,那么它传送的就是地址...

C++中二维数组在函数中传递时形参和实参应该怎么写
,实参直接用数组名。样例代码:\/* 注意列数必须要给出来,因为 程序 要计算(a+1)的位置就必须知道列数 *\/ int foo1(int (*a)[10]) {return a[1][0];} \/* 形参 本质 上仍是指向数组的指针,只是写成了数组的 形式 \/ int foo2(int a[10][10]) {return a[1][0];} \/* 如上...

[SystemVerilog语法拾遗] 不同类型的数组作为方法参数时使用区别_百 ...
可见,实参为动态数组时,形参只能是动态数组或队列,不能是静态数组。3、实参为队列。静态数组作为参数的函数无法使用,代码实例如下:打印结果如下:可见,实参为队列时,形参只能是动态数组或队列,不能是静态数组。接下来,讨论函数参数数组作为输入输出类型时的情况,包括inout和ref。涉及到的函数如下...

什么是形参和实参?
形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。函数的形参和实参具有以下特点:1. 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调...

相似回答