c语言中数组作为函数形参,c语言数组做函数形参-成都快上网建站

c语言中数组作为函数形参,c语言数组做函数形参

C语言中数组作为函数参数

C中数组名代表该数组的首地址,

创新互联公司主营纳雍网站建设的网络公司,主营网站建设方案,重庆APP开发公司,纳雍h5微信平台小程序开发搭建,纳雍网站营销推广欢迎纳雍等地区企业咨询

char

s[]="abc";

s代表的就是‘a’在内存中的地址

以地址作参数

,实参和形参同时改变

C语言中如何将二维数组作为函数的参数传递

在C语言中可以用二维数组作为实参或者形参。

1、函数中用二维数组作为形参,函数声明中可以指定所有维数的大小,也可以省略第1维的维数如:

void f(int array[3][10]); //正确

void f(int array[][10]);  //正确

上面的两种二维数组形参表示都是正确的。

2、函数中用二维数组作为形参,不能把第2维或者更高维的大小省略,如下面的定义是不合法的:

void f(int array[][]); //错误

因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能只指定一维而不指定第二维,下面写法是错误的:

void f(int array[3][]);  //错误

3、二维数组作为实参传递时,必须保证实参第2维的维数与形参第2维的维数相同,因为必须要保证形参和实参的数据类型一致。比如定义如下函数:

void f(int array[][10]);

可以将如下数组传递给函数f。

int a[2][10] = {1,2,3,4}; 

int b[4][10] = {1};

c语言怎么将数组作为函数参数传入?

一维数组的元素作为函数实参,与同类型的简单变量作为实参一样,是单向的值传递,即数组元素的值传给形参,从而形参是改变不影响实参

数组名代表着整个数组的地址,如果一维数组的名字作为函数实参,传递的是整个数组,即形参数组和实参数组完全相同,是存放在同一存储空间的同一个数组。这样形参数组

修改时,实参数组也同时被修改了。形参数组的元素个数可以省略。

#includestdio.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 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语言中用数组做为形参为什么形参改变时实参也要变??

c语言中数组名作为实参传给被调用的函数时,形参获得的是数组的起始地址。

还是用例子说话吧。

#include

int

*arry(int

*a)

{

int

*b;

b

=

a;

int

i;

for(i=0;i5;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;i5;i++)

{

printf("%d",c[i]);

}

}

主要是通过指针把数组,例如main里面的a的地址传入arry函数,然后在arry函数中用一个兼容类型的指针接收地址,然后就可以再这个指针下的地址操作地址上面的数据了。

arry返回的时候也是返回一个指针(地址)。


本文题目:c语言中数组作为函数形参,c语言数组做函数形参
浏览路径:http://kswjz.com/article/hciisd.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流