精华内容
下载资源
问答
  • c语言中数组作为形参 万次阅读 多人点赞
    2019-09-12 10:31:43

    数组可以做为函数形参传入进行处理,此时的数组变量退化为数组首元素的地址。其他读写操作可以类推,但是长度不能导入。

    int test(int array [],int len) 
    {
    
    	int sum = 0;
    	for (int i = 0; i < len; i++) 
    	{
    		 array[i]+=3;
    	}
    	return sum;
    }
    int main()
    {
    	int array[] = { 1,2,3,4 };
    	int sum = test(array,sizeof(array)/sizeof(int));
    	//printf("%d", sum);
    	int len = sizeof(array)/sizeof(int);
    	for (int i = 0; i < len; i++)
    	{
    		printf("%d", array[i]);
    		printf("\r\n");
    	}
        return 0;
    }

     

    更多相关内容
  • JavaScript数组形参

    千次阅读 2020-05-21 15:49:42
    function getArrMax(arr) { // arr 接受一个数组 arr = [5,2,99,101,67,77] var max = arr[0]; for (var i = 1; i ; i++) { if (arr[i] > max) { max = arr[i]; } } return max; } // getArrMax([5, 2, 99, 101, 67...
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script>
            // 利用函数求数组 [5,2,99,101,67,77] 中的最大数值。
            function getArrMax(arr) { // arr 接受一个数组  arr =  [5,2,99,101,67,77]
                var max = arr[0];
                for (var i = 1; i <= arr.length; i++) {
                    if (arr[i] > max) {
                        max = arr[i];
                    }
                }
                return max;
            }
            // getArrMax([5, 2, 99, 101, 67, 77]); // 实参是一个数组送过去
            // 在我们实际开发里面,我们经常用一个变量来接受 函数的返回结果 使用更简单
            // var re = getArrMax([5, 2, 99, 101, 67, 77]);
            var re = getArrMax([3, 77, 44, 99, 143]);
            console.log(re);
        </script>
    </head>
    
    <body>
    
    </body>
    
    </html>
    
    展开全文
  • 数组作为函数形参

    2020-03-09 22:04:24
    数组作为函数形参会退化为指针...//以上三种形参是等价的,数组的方括号在函数的形参中是无意义的,但是void sort_array(int a[0]);会报错,因为方括号中不能为0 再举个例子说明: 从图中的代码可以看出,j并不...

    数组作为函数形参会退化为指针变量

    void sort_array(int a[10]);
    void sort_array(int a[10]);
    void sort_array(int *a);
    //以上三种形参是等价的,数组的方括号在函数的形参中是无意义的,但是void sort_array(int a[0]);会报错,因为方括号中不能为0

    再举个例子说明:

    从图中的代码可以看出,j并不为数组元素的个数。二是在64位系统中,j=2,在32位系统中,j为1。

    因为整型变量在C语言中占4个字节,64为系统地址为64为,则指针变量占8个字节,同理,32为系统中指针变量占4个字节。从上述代码就可以看出,函数形参中的a已经退化为指针变量。

    展开全文
  • 数组作为形参的使用

    万次阅读 多人点赞 2018-07-30 13:08:00
    1、对于一维数组来说,数组作为函数参数传递,实际上传递了一个指向数组的指针,在c编译器中,当数组名作为函数参数时,在函数体内数组名自动退化为指针。此时调用函数时,相当于传址,而不是传值,会改变数组元素的...

    来源:https://www.cnblogs.com/weixiaoyu/p/4371806.html

    1、对于一维数组来说,数组作为函数参数传递,实际上传递了一个指向数组的指针,在c编译器中,当数组名作为函数参数时,在函数体内数组名自动退化为指针。此时调用函数时,相当于传址,而不是传值,会改变数组元素的值。

    例如:void fun(int a[]);    若在fun函数中有a[i]++;等语句,那么对应的数组元素会被修改,调用时直接用fun(a);即可。

    2、对于高维数组来说,可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:

    void fun(int array[3][10]);

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

    二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:

    void fun(int array[][]);

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

    void fun(int array[3][]);

    实参数组维数可以大于形参数组,例如形参数组定义为:

    void fun(int array[3][10]);

    而实参数组定义为:

    int array[5][10];

    这时形参数组只取实参数组的一部分,其余部分不起作用。

    可以看到,将二维数组当作参数的时候,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小,这是由编译器原理限制的。学编译原理的时候应该 知道编译器是这样处理数组的:

    对于数组 int p[m][n];

    如果要取p[i][j]的值(i>=0 && i<m && 0<=j && j < n),编译器是这样寻址的,它的地址为:

    p + i*n + j;

    从以上可以看出,如果我们省略了第二维或者更高维的大小,编译器将不知道如何正确的寻址,即这里的n值是在形参定义的时候就要明确知道的。但是我们在编写程序的时候却需要用到各个维数都不固定的二维数组 作为参数,这就难办了,编译器不能识别阿,怎么办呢?不要着急,编译器虽然不能识别,但是我们完全可以不把它当作一个二维数组,而是把它当作一个普通的指针,再另外加上两个参数指明各个维数,然后我们为二维数组手工寻址,这样就达到了将二维数组作为函数的参数传递的目的,根据这个思想,我们可以把维数固定 的参数变为维数随即的参数,例如:

    void fun(int array[3][10]);

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

    变为:

    void fun(int **array, int m, int n);

    在转变后的函数中,array[i][j]这样的式子是不对的(不信,大家可以试一下),因为编译器不能正确的为它寻址,所以我们需要模仿编译器的行为把array[i][j]这样的式子手工转变为:

    *(*array + n*i + j);

    在调用这样的函数的时候,需要注意一下,如下面的例子:

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

    fun(a, 3, 3);

    根据不同编译器不同的设置,可能出现warning 或者error,可以进行强制转换如下调用:

    fun((int**)a, 3, 3);

    展开全文
  • 形参中的数组

    千次阅读 2018-11-07 14:57:51
    形参中的数组 数组形参中有3种不同的表达方式 #include &lt;stdio.h&gt; //1、形参中的数组,不是数组元素,它是普通的数组指针变量 //2、形参数组:int a[100000],int a[], int *a对编译器而言,没有任何...
  • 在函数中以数组作为形参

    千次阅读 多人点赞 2018-09-18 14:54:15
    说明: 数组的两个特殊性质对我们定义和使用作用在数组上的函数有影响,这两个性质分别是: 不允许拷贝数组;...尽管不能以值传递的形式传递数组,但是我们可以形参写成类似数组的形式: //尽管形式不同...
  • 自己在敲函数时想要自己建立一个子函数,子函数的作用是进行一些运算,它的形参是一个二维数组,数据类型是整型。返回值是个整数,我在函数申明时写成了这样  int jisuan(int a[ ][ ]) 这是一种错误的写法,一般...
  • 数组形参和实参总结

    千次阅读 2021-02-23 20:31:49
    参考链接: 数组名作为函数参数 指针数组和数组指针,二维数组和二级指针作为...在下面的函数中,a作为数组名,可以直接作为reverse的形参,如果在main函数中定义一个指针变量*p,让p = a,然后写reverse(p,9),结果也是
  • 形参中的数组是指针变量不是数值 #include<stdio.h> //void printf_array(int a[1000],int n) //void printf_array(int a[],int n) void printf_array(int *a,int n) //这三种写法等价 { int i = 0; for ...
  • 一、C语言中的数组指针与指针数组 首先我们需要了解什么是数组指针以及什么是指针数组,如下图: int *p[5]; //指针数组 int (*p)[5];...那么也可以理解为数组指针是指向数组的指针,其中数组中存放的还是指针
  • 数组元素不能作形参,那么结构体成员可以形参使用么?看书的时候看到说数组元素只能做函数实参,不能做函数形参。我的理解是:intF(inta[10]),其实此处a是一个指针变量(也就是数组名,c把数组名作为指针变量),...
  • C++中数组作为函数形参的几种形式

    千次阅读 2022-02-14 15:15:57
    C++中数组作为形参的几种形式
  • 2.c++形参传入数组指针时,需要传入数组的长度 #include <iostream> using namespace std; int* getSortedArray(int *array,int length);//函数声明,排序后返回数组 bool sortedOK(int *array,int length);//...
  • A数组作为参数传递给函数进行排序,但不想改变A数组数据位置,即数组不进行虚实结合 eg:const int A[10] = { 49,38,65,97,76,13,27,49,55,04 }; void(const int a[]) 但是这样就没法子在函数内部用 int len=...
  • 1、一维数组 一维数组名的值是一个指针常量,他的类型是“指向元素类型的指针”,它指向数组的第一个元素。 例如:定义 int a[10] 则 创建了 a ,他指向了一个一维数组,包含10个元素, a 的值是一个指向他第一个元素...
  • 数组作为形参知识点 1.数组的维度必须是一个常量表达式 int main(void) { constexpr int i = 20; int j = 5;//不是常量表达式 int arr1[i];//正确 int arr2[j];//错误 system("pause"); return 0...
  • 形参中的数组,不是数组,是指针(对应数据首元素地址,用sizeof获取的是指针大小,而不是数组大小) 形参数组:int a[100], int[a], int *a 对编译器而言是一样的,都当做int *处理 */ void f(int a[100]){ cout...
  • C 数组形参

    千次阅读 2019-03-14 14:57:28
    1、对于一维数组来说,数组作为函数参数传递,实际上传递了一个指向数组的指针,在c编译器中,当数组名作为函数参数时,在函数体内数组名自动退化为指针。此时调用函数时,相当于传址,而不是传值,会改变数组元素的...
  • C++中数组作为形参的方法

    千次阅读 2019-06-04 15:27:08
    有两种传递方法,一种是function(int a[]); 另一种是function(int *a) 这两种两种方法在函数中对数组参数的修改都会影响到实参本身的值!...但是数组是个例外,因为数组的数据太多了,将其一一赋值既麻烦又浪费空...
  • C++之引用数组形参

    2021-10-25 16:16:58
    当引用一个数组作为形参时: #include <iostream> void a(unsigned char (&tmp)[200]) { printf("%x\r\n",tmp); sprintf((char *)&tmp,"aaaaaa"); } int main(int argc, char **argv) { ...
  • c++数组作为形参

    2022-01-08 13:33:25
    数组可以做为函数形参传入进行处理,此时的数组变量退化为数组首元素的地址。其他读写操作可以类推,但是长度不能导入。 数组作为形参直接影响数组元素 ​ #include<iostream> #include<...
  • 用选择法法对数组中的10个整数按由小到大排序。 #include using namespace std; int main() { void select_sort(int arrary[],int n); //函数声明 int a[10],i; cout<<"enter the originl array:"<&l.....
  • C++中函数的数组形参

    千次阅读 2018-09-08 22:13:18
    函数的操作数,也即形参(parameter),在一对圆括号中声明,形参形参之间以逗号分隔。 void swap(int a, int b) { int temp = a; a = b; b = temp; } 在以上函数中,参数a和b就是swap()函数的形参。当...
  • c语言数组形参

    2020-06-16 19:57:47
    在c语言中,如果数组作为参数传递,会退化为指针。 void testPara(int nums[]) { int len = sizeof(nums) / sizeof(int); printf("形参数组长度为%d\n", len); } int main() { int nums[] = {1,2,3,4,5}; int ...
  • 在字符型的数组中我们可以使用 strlen() 来获取当前数组的长度,对于其他类型的数组,这个方法就不适用了。由于经常会遇到计算数组长度的问题,经过思考,考虑通过一个函数来实现数组长度的计算。思路是这样的:通过...
  • 【C语言】数组形参

    千次阅读 2017-07-15 23:30:17
    数组形参
  • 二维数组作为形参

    2021-08-26 10:41:22
    首先需要理解编译器对于二维数组是如何寻址的: ...因此如果想要采用数组下标的形式作为形参,则必须给定n值(该即二维数组一行有多少列),否则无法定位出所寻址行的首地址,则无法进行正常的寻址。
  • C++:数组形参的传递

    千次阅读 2019-01-15 09:59:57
    不允许拷贝:无法以值传递的方式使用数组形参 使用数组时通常都会转换为指针:当我们为函数传递一个数组时,实际上传递的是指向数组首元素的指针。 传参的方法 当下有一个数组int j[2]={0,1},我们自写了一个函数 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 157,736
精华内容 63,094
关键字:

形参可以是数组吗