c语言函数形参是数组
⑴ c语言中函数定义形参为数组时的问题
1.数组为参数传递的是数组首地址,而不是元素的值,而你说的a[size]仅仅是值,况且事实上也没有a[size]这个元素
2.既然是数组名的传递,当然需要由一个数组的参数来接收,int v[]”的问题是因为他是形式参数,是为了接收数组的
n的问题是因为,如果只传递了数组,但是函数并找不到数组的个数,所以需要把数组大小传递过来
⑵ 关于c语言中数组作为函数参数的函数之间调用问题
1、新建一个数组作为参数项目,如图所示:
⑶ C语言中,数组名作为函数参数,属于什么传递,为什么
C语言中,数组名作为函数参数,属于数组参数传递。在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。
数组型变量名本身只是该数组所占存储空间的首地址,函数调用时,系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储空间,此后,将实参数组的首地址传递给形参变量。
(3)c语言函数形参是数组扩展阅读:
数组参数在传递时应注意以下两个方面:
1、 在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分隔。
2、被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界。
⑷ 函数形参是数组 但是我想对对作为形参的数组的操作不改变实参数组
1。保证传递的实参不被改变,因此可以考虑定义局部数组用于返回,但是考虑到程序的健壮性,应该在定义时用const限定
2。只对形参的数组操作,可用一个简单的return 返回,但前提是不能返回动态开辟的内存
因此可以定义为如下形式:ElemType * fun(const ElemType *array)或者其他等同形式
3。很多C语言库函数就是这样定义,如strcpy函数等,但是C语言中并没有const关键字
⑸ 在C中想把数组作为函数的一个形参,是怎样的形式
EG:
void
sortl(float
b[],int
n)/*其中函数参数有两个:一个是数组,形参的形式是b[],它在调用是接受具体数组的首地址;另一个形参是N,它在调用时数组元素的具体个数。注意用数组作为形参时,数组名是一对空方括号,而不能写成b[n],数组元素个数用另一个形参*/
{
int
i,j;
float
t;
for
(i=0;i
b[j])
{
t=b[i];b[i]=b[j];b[j]=t
}
}
⑹ 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语言中数组作为函数参数
C中数组名代表该数组的首地址,
char
s[]="abc";
s代表的就是‘a’在内存中的地址
以地址作参数
,实参和形参同时改变
⑻ c语言 函数调用(形参为数组名的情况)
#include <stdio.h>
void sort(int a[20])
{ int i,j,k,t;
for(i=0;i<19;i++)
{ k=i;
for(j=i+1;j<20;j++)
if(a[k]>a[j]) k=j;
t=a[k];a[k]=a[i];a[i]=t;
}
}
void main()
{ int a[20]={2,5,7,8,4,10,48,96,65,74,35,84,15,38,52,56,60,20,17,80};
sort(a);
}
没问题
我调试过了
记得给我加分
⑼ 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语言自定义函数形参为数组名有必要返回值吗
如果仅仅为了修改数组的值,是不需要返回值了,因为代表了一个单元。
但是按照规范来说,最好每一个调用函数都有一个返回值比较安全。例如当你做容错的时候也方便多了。
楼下的哥们,就算是改变值也没有必要返回值,注意他的参数是一个数组名,是一个地址。