因为数组名是一个地址,你可以把这个地址作为函数的参数传递进去就可以了。举例如下:
int a[3]={1,2,3};
int avg(int a,int k)
{
int sum = 0;
for(int i=0;i<k;i++) sum += a[i];
return sum;
}
二维数组的也是传地址作为参数,只是在调用的时候以“数组名+行序”这样的形式来调用。
数组名就是指针,例如:
#include <stdioh>
void pr(char p)
{
printf(p);
}
void main(void)
{
char s[] = "abc";
pr(s);
}
扩展资料:
注意事项
非数组类的声明尽量以指针的方式进行比较好。倘若一个指针指向的内存并不是一个数组,那么采用数组名的声明方式或许就会给人产生错误的引导。类似的,如果指向的是一个数组区域,则会给人以更加丰富的信息。例如:
int main(int argc,char argv[])
{
/ code here /
}
与
int main(int argc,char argv)
{
/ code here /
}
两种方式完全等价,但是前面一种能够更清晰地看出:这个参数是指向某个元素起始地址的指针,而后面的这种方式则不能够直观地看出这种含义。
不对。int,char或者自定义的类可以通过值参数和引用参数两种方式传递给函数,数组不行。
数组是两种指针传递:
void
sort(int
a);
//对于指针a来说是值传递,对于数组来说是指针传递
void
sort(int
a[100]);
//这种方法类似于引用,但实质上还是指针传递
所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。
所以在数组中只能存储相同类型的类对象。
要存储多个对象,只需要定义一个类对象数组,然后赋值进去即可。
如类名为A,要存储最多100个对象,需要定义为
A array[100];
然后对于任意的一个对象b,要存储到array的第i个元素中(i在0到99之间)的赋值语句可以写作:
array[i] = b;
1, 变量作为参数,这是单向值传递。即将数据传给被调函数后,与调用函数就不相关了,必须通过函数值返回 *** 作结果。
如有函数声明:void swap(int a,int b); //功能是交换a,b值,但事实上对调用函数没有影响,因为swap函数的局部变量a,b在该函数执行完释放掉了,其值也就丢失了。
2 指针、数组作为参数,这是地址传递,指针和数组可以看成是指向一个或一片连续空间的指针(区别是:一个为变量地址,一个常量地址),它们传递的是所指数据或数据区的地址,这使得函数直接 *** 作的就是原数据区的数据。好处是可以直接通过函数改变调用函数中的多个数据。
如有函数声明:void swap(int a,int b); 传递是指向所指空间的地址,执行后,直接交换了调用函数中的数据;
再如: void max(int a[],n),求数组a中的最大值。也是传递数组的地址, *** 作的是调用函数的数组元素。
3引用作为参数,引用就是别名,其实也是地址传递,但它是常量地址
形参和实参只要维数对应就可以了
例如
函数中 proc(int a[][10]) 可以省略第一维的大小,因为c语言编译系统不检查第一维的大小,只要第二维大小相同,形参数组第一维可以与实参不同。
主函数中 先定义了b[][10]
引用时:proc(b)即可
即把2维数组b得首地址即b[0][0]的地址传给形参a,因为数组名本身既是指针常量,所以在函数中对数组a中元素的 *** 作会改变数组b中元素得值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)