相关文章推荐

可以看到当整数作为函数参数时实际参数为定义名字为a和b的变量,形式参数相当于定义了局部变量a和b
按照这种方法我们可以把a和b换成一个数组,来进行函数和数组的结合
先看代码

#include <stdio.h>
#include <stdlib.h>
int Print(int array[3])
	int i;
	for(i = 0;i < 3;i++){
		printf("%d",array[i]);
int main()
    int array[3] = {1,2,3};
    print(array);
	system("pause");
	return 0;

代码中定义了一个名为array的数组,有3个数,然后调用Print函数,实际参数为数组名array,在Print函数中形式参数为int型的数组,有三个元素,for遍历数组,这样就可以运行了。
但是当形式参数中的3随便改一个数或者不写数时

int Print(int array[10])
int Print(int array[])

运行结果没有任何影响,可以看到形式参数中的数并不代表实际参数中数组的长度,那么怎样才能把实际参数中数组的长度传到形式参数呢?
下面介绍c语言关键字sizeof()
在 C 语言中,sizeof() 是一个判断数据类型或者计算表达式长度的关键字。
数组的sizeof值等于数组所占用的内存字节数
如下

	int array[3];
    printf("数组占的总字节数为%d\n",sizeof(array));
    printf("一个元素占的字节数为%d\n",sizeof(array[0]));

上面定义了一个名为array,长度为3的数组,第二句打印的是数组占的总字节数,如果打印出来的话结果为12,因为一个int占4个字节,所以3个int占12个字节,第三句打印的是数组中的一个元素占的字节数,打印出来应该为4。
那么数组的长度就应该为数组占的总字节数除一个元素占的字节数。

 printf("数组的长度为%d\n",sizeof (array)/sizeof(array[0]))

上面运行结果应该为3,这样就算出了数组的长度,可以利用sizeof把数组的长度传递给形式参数,这样就可以在子函数中知道数组的长度了,方便遍历数组。
代码如下

#include <stdio.h>
#include <stdlib.h>
int Print(int array[],int data)
	int i;
	for(i = 0;i < data;i++){
		printf("%d",array[i]);
int main()
	int data;
    int array[3] = {1,2,3};
    data = sizeof (array)/sizeof(array[0]);
    Print(array,data);
	system("pause");
	return 0;

这样在调用Print函数时,将数组名和数组的长度都作为实际参数传递给了形式参数,在Print函数中就可以遍历数组了,在形式参数中的int array[ ]只是代表是一个数组,[ ]中有没有数字没有任何关系,一般为空。
Print(array,data)中的array相当于数组的首地址,数组名 = 数组首地址,即 Print(array,data) = Print(&array[0],data),把地址传递给Print函数的,在Print函数中给数组赋值,遍历数组,改变数组中的元素都相当于直接操作的main函数中数组的值。

在c语言中有时需要数组作为函数的参数进行传参,那么应该怎样传递呢?先看一下整数作为函数参数时的传参#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;int Add(int a,int b){ int c; c = a + b; return c;}int main(){ int a = 1; int b = 2; printf("%d",Add(a,b)); system("pause"); return 0;
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不至于再在这上面浪费时间。 首先,我引用了谭浩强先生编著的《C程序设计》上面的一节原文,它简要介绍了如何将二维数组作为参数传递,原文如下(略有改变,请原谅): [原文开始]...
可是当使用了两种方法传递数组到另一个被调函数之后,在被调函数内部可以发现sizeof拿不到数组的长度,而是单个指针变量的size。我在 main 函数定义了一个数组,要将该数组作为参数传递给其他方法。可以当把这个数组作为参数传到另一个方法的时候,在另一个方法无法用同样的方法计算得出数组长度。下图:在main方法声明了数组,可以通过sizeof计算出数组长度:20字节。注意,C语言数组作为函数参数时,数组长度无法在被调用函数计算,所以。在此处返回的是指针变量的size,而非数组本身的size。
柯里化 (Currying)是把接收多个参数的原函数变换成接受一个单一参数(原来函数的第一个参数的函数)并返回一个新的函数,新的函数能够接受余下的参数,并返回和原函数相同的结果。 ES6的方式实现柯里化的通用 function currying(fn,...rest1){ return function(...rest2){ //这里用apply 是为把数组形式的参数直接传入原函数 null是因为不需要改变this return fn.apply(null,rest1.concat(rest2)); 将一个sayHello函数柯里化 function sayHello(
可以定义一个能接受数组作为函数参数的函数,然后调用这个函数时,可以将一个实际的数组传递给它。 数组作为函数参数时,其定义方式有下列三种: /*函数名param后跟一个空的[],说明param可以接受一个数组*/ void myFunction(int param[]) { /*函数体 代码*/ /*函数名param后跟一个非空的[size],说明param可以接受一个大小为size的数...
1.sizeof(数组名),这时候计算的是整个数组的字节长度 2.&数组名,例如在32位系统,整形数组 arr里面五个元素,输出这个数组首元素地址。末尾是00那么&arr+1 输出末尾就是4*5+4
使用python向C语言的链接库传递数组、结构体、指针类型的数据 由于最近的项目频繁使用python调用同事的C语言代码,在调用过程踩了很多坑,一点一点写出来供大家参考,我们仍然是使用ctypes来调用C语言的代码库。 至于如何调用基础数据类型的数据,请大家参考我的另外一篇文章:Python使用ctypes调用C/C++的方法 1. 使用python给C语言函数传递数组类型的参数 想必很多时候,C语言会使用数组作为参数,在之前我们使用过ctypes的一些数据类型作为C语言参数类型,包括byte、short、int、double之类的,但是在使用数组类型的时候,我们也是有着类似的做法,下面我们
1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。   2、数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。   3、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
实现一些功能时,我们经常要进行对数组的操作。 而将这些带有对数组元素进行操作的代码封装进一个函数时,我们应该采用地址传递的传参方式,以真正地实现对数组数据的更改 (若为值传递,改变的是函数拷贝的临时数组,并不能真正改变原来传入数组的元素)。 C++主要有两种能实现地址传递的方法: 此处记录了使用 指针 来传递数组函数的一些方法。(包括一维数组的两种值传递、两种地址传递,二维数组的一种值传递、一种地址传递) 尤其需要注意函数形参的语法格式 指针 * 到底从属于形参的变量类型..
在 C 语言数组是一种用来存储多个相同类型的数据的数据结构。要使用数组,需要先声明数组的类型和名称,然后可以通过下标来访问数组的每一个元素。 举个例子,如果我们想声明一个存储整数的数组,可以这样写: int numbers[10]; // 声明一个名为 numbers 的数组,它可以存储 10 个整数 如果要调用自定义函数来使用数组,可以在函数的参数列表声明一个数组类型的参数。例如,如果我们想写一个函数来计算数组所有元素的平均值,可以这样写: double avg(int arr[], int size) { int sum = 0; for (int i = 0; i < size; i++) { sum += arr[i]; return (double)sum / size; 在调用函数时,可以将数组名作为参数传递函数函数内部就可以使用数组来计算平均值了。例如: double avg_value = avg(numbers, 10); 注意,在 C 语言数组名本身就是一个指向数组首元素的指针,因此在调用函数时可以直接将数组名传递给数组类型的参数。在函数内部,也可以使用指
 
推荐文章