c语言数组做形参
‘壹’ c语言数组做形参定义语法
a如果是函数是可以的,x[]表示数组x的地址,int x[]等价于int *x
‘贰’ 数组作为实参和形参的形式是怎样的
两者都可以,可以用下面的程序展示。
#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 ", a[i]);
}
printf(" ");
}
/*
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("数组排序前打印: ");
printfArray(a, num);
//开始对数组进行排序
sortArray(a, num);
printf("数组排序后打印: ");
printfArray(a, num);
system("pause");
}
(2)c语言数组做形参扩展阅读:
用数组名作函数参数与用数组元素作实参有几点不同。
1、用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的。
2、在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。在用数组名作函数参数时,不是进行值的传送,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素。
因为实际上形参数组并不存在,编译系统不为形参数组分配内存。那么,数据的传送是如何实现的呢?在我们曾介绍过,数组名就是数组的首地址。
因此在数组名作函数参数时所进行的传送只是地址的传送,也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。
注意:
数组有两个特殊的性质。一是不能复制数组;二是使用数组名字时,数组会自动转化为指向其第一个元素的指针。由于数组不能复制,所以无法编写使用数组类型形参的函数,因为数组会被自动转化为指针。
‘叁’ C语言中如何将二维数组作为函数的参数传递
在C语言中可以用二维数组作为实参或者形参。
1、函数中用二维数组作为形参,函数声明中可以指定所有维数的大小,也可以省略第1维的维数如:
voidf(intarray[3][10]);//正确
voidf(intarray[][10]);//正确
上面的两种二维数组形参表示都是正确的。
2、函数中用二维数组作为形参,不能把第2维或者更高维的大小省略,如下面的定义是不合法的:
voidf(intarray[][]);//错误
因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能只指定一维而不指定第二维,下面写法是错误的:
voidf(intarray[3][]);//错误
3、二维数组作为实参传递时,必须保证实参第2维的维数与形参第2维的维数相同,因为必须要保证形参和实参的数据类型一致。比如定义如下函数:
voidf(intarray[][10]);
可以将如下数组传递给函数f。
inta[2][10]={1,2,3,4};
intb[4][10]={1};
‘肆’ 如何在C语言中以数组指针作为形参输出数组
数组 与 普通指针 的区别:
1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。
2、数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它的特征是"可变",所以我们常用指针来操作动态内存。
3、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
因为第三条,当把数组名作为函数的形参进行传递时,该效果等同于传递一个同类型的指针。直接在程序当中调用 函数名(数组名)即可。
例程:
#include<stdio.h>
inta[]={1,2,3,4,5,6};
voidprint(inta[]){//数组指针作为形参
for(i=0;i<6;i++)printf("%d",a[i]);//输出数组
}
intmain(){
print(a);//传入数组名
return0;
}
‘伍’ 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
‘陆’ 在c语言中的变量声明中,实参传递给形参用数组怎么表示
数组作为形参,传递的是能够代表一个维度的数组的数组名,也就是地址。所以形参只能是一维数组的形式(当然可以是用指针表示的)。而实参可以是一维数组,也可以使多为数组的某一维的数组名。下面是定义的两中普通函数的形式(假设传递的是整形的数组)
void
function(int
a[]){}
void
function(int
*
a){}
‘柒’ c语言c++语言如何用二维数组做形参
C/C++中,二维数组的第一维的每一个元素都是一维数组。所以,用指向一维数组的指针或用第一维维数空缺的二维数组作为函数的形式参数都能达到目的。设处理数组为int型,举例代码如下:
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
voidmyprint(int(*p)[5]){//p是指向有5个int型元素的一维数组的指针
//voidmyprint(intp[][5]){//这样写效果是一样的
inti,j;
for(i=0;i<3;i++){
for(j=0;j<5;printf("%3d",p[i][j++]));
printf(" ");
}
}
intmain(void){
inta[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
myprint(a);
return0;
}
‘捌’ C语言中用数组做为形参为什么形参改变时实参也要变
c语言中数组名作为实参传给被调用的函数时,形参获得的是数组的起始地址。
还是用例子说话吧。
#include
int
*arry(int
*a)
{
int
*b;
b
=
a;
int
i;
for(i=0;i<5;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;i<5;i++)
{
printf("%d",c[i]);
}
}
主要是通过指针把数组,例如main里面的a的地址传入arry函数,然后在arry函数中用一个兼容类型的指针接收地址,然后就可以再这个指针下的地址操作地址上面的数据了。
arry返回的时候也是返回一个指针(地址)。
‘玖’ C语言中关于字符数组做形参的问题~菜鸟求救~
void cnect(char strn1[8],char strn2[4],char strn3[13],int l1,int l2)
{
int i,k,t;
for(i=0;i<l1;i++)
strn3[i]=strn1[i];
for(k=0;k<l2;k++)
{
t=i+k+1;
strn3[t]=strn2[k];
}
strn[12]='\0';//////////////////////////////////这里加上\0(空字符)字符,结尾字符串;
}
我用的VC++,没用过TC
问题2
char str1[]={"I love "},str2={"you"},str3[13];
改str2[]=“you”;
也要字符末尾没加空字符吧