精华内容
下载资源
问答
  • 数组作为参数传入函数为什么不是作为形式参数传入,请你看程序运行结果,如果数组作为形式参数传入函数,那么形式参数的值并不会影响原来main函数中的值,但是实际上,main函数数组原来的值已经被修改了,这是...
  • c++中数组作为参数传入函数

    万次阅读 多人点赞 2019-04-15 19:23:38
    其中涉及了大量的数组运算,所以数组作为参数传入函数很重要,这里记录一下。 一维数组作为参数 1.我们除了要将数组传入函数外,为了规范化,我们还要将数组的大小也要作为参数传入,而不是在函数内部去定义大小...

    前言:最近再看一个用c++写数组求逆矩阵的程序,那是相当的繁琐,但是很有趣。其中涉及了大量的数组运算,所以数组作为参数传入函数很重要,这里记录一下。


    一维数组作为参数

    1.我们除了要将数组名传入函数外,为了规范化,我们还要将数组的大小也要作为参数传入,而不是在函数内部去定义大小。即下面这种形式:

    int sum_arr (int att[] , int size)
    

    2.我们学习c的时候知道数组名就是首元素的地址,所以实际上传入函数的不是数组名,而是首元素的地址,所以除了上面的声明形式外,还可以写成

     int sum_arr (int *att , int size)
    

    第一种很好理解直观,第二种最符合实际。

    不管是哪种定义,使用函数时都是将数组名作为参数。比如 :

    sum_arr (Ss , 66);
    

    3.不要使用方括号表示法来传递长度

      int sum_arr (int att【size】)   //这是错的
    

    4.不管是哪种声明方式,如果在函数内部对传入的数组进行了修改,该数组本身的值也会改变,有点像引用,这是因为前面提到过传入的是地址,我们是直接对地址上的元素进行修改。

    5.为了防止在函数中修改了数组,可以使用const。
    方法: 在声明的形参前加入const

      int sum_arr (const int att[] , int size)
    

    6.在c++中,引入了一种新的方式,那就是使用数组区间。前面我们是将数组的首元素的地址和长度传入,这样就可以处理所有元素,当然我们也可以传入数组的首元素地址和末尾地址,参数就是【数组名,数组名+长度】,这样也可以处理所有元素,这就是数组区间。自然,我们也可以传入任意区间。

    比如下面的代码:

    int sum_arr(const int *begin,const int *end)
    {
        const int *pt;
        int total = 0;
    
        for(pt = begin ; pt != end ; pt++)
        {
            total = total + *pt;
        }
        return total;
    }
    
    
    int A[Size] = {0,1,2,3,4,5,6,7} ;
    int sum = sum_arr(A,A+8);
    

    二维数组作为参数

    与一维数组一样,有两种声明方式,但是区别是必须写出列数。
    第一种:

    int sum(int A[ ][ 4] , int size)  //不能写成 int sum(int A[ ][ ] , int size),必须将列数写进去,size的值是行数
    

    第一种:

    int sum(int (*A)[ 4] , int size)  //同样,必须将列数写进去,size的值是行数,而且必须要将*和数组名括起来。
    

    至于使用方法都是一样,sum(A,4)

    注意同样,不管是哪种声明方式,如果在函数内部对传入的数组进行了修改,该数组本身的值也会改变,有点像引用,这是因为前面提到过传入的是地址,我们是直接对地址上的元素进行修改。

    例子:用二维数组实现矩阵的转置:

    #include <iostream>
    
    using namespace std;
    const int hangshu = 2;
    const int lieshu = 4;
    
    
    
    void zhuanzhi(int A[][lieshu],int B[][hangshu],int B_hangshu)
    {
        for(int i = 0 ; i < B_hangshu  ; i++)
        {
            for(int j = 0 ; j < 2  ; j++)
                B[i][j] = A[j][i];
        }
    }
    
    
    void show(int A[][lieshu],int hangshu,int lieshu)
    {
        int i,j;
        for(i=0;i<hangshu;i++)
        {
            for(j=0;j<lieshu;j++)
                    cout << A[i][j] << " ";
            cout << endl;
        }
    }
    
    void show2(int (*B)[2],int hangshu,int lieshu)
    {
        int i,j;
        for(i=0;i<hangshu;i++)
        {
            for(j=0;j<lieshu;j++)
                    cout << B[i][j] << " ";
            cout << endl;
        }
    }
    
    void input(int A[][lieshu],int hangshu,int lieshu)
    {
        int i,j;
        for(i=0;i<hangshu;i++)
            for(j=0;j<lieshu;j++)
                cin >> A[i][j];
    }
    
    
    int main()
    {
        int A[hangshu][lieshu];//2*4
        int B[lieshu][hangshu];//4*2
        input(A,2,4);
        show(A,2,4);
        zhuanzhi(A,B,4);
        show2(B,4,2);
    
        return 0;
    }
    
    /****************************************************
    int sum_arr(const int *begin,const int *end)
    {
        const int *pt;
        int total = 0;
    
        for(pt = begin ; pt != end ; pt++)
        {
            total = total + *pt;
        }
        return total;
    }
    
    
    int A[Size] = {0,1,2,3,4,5,6,7} ;
    int sum = sum_arr(A,A+8);
    ***************************************************/
    

    另外,这个程序如果可以写进一个类里面更好

    展开全文
  • 1.整个数组当作函数参数,即把数组名称传入函数中,例如: #include<stdio.h> void temp(int arr[]) { int i; for(i=0; i<5; i++) { printf("%d\n", arr[i]); } } int main() { .

    47.数组作为函数参数

    变量可以当作参数,这里的数组也可以当作函数的参数。

    数组可以由整个数组当作函数的参数,也可以由数组中的某个元素当作函数的参数;

    1.整个数组当作函数参数,即把数组名称传入函数中,例如:

    #include<stdio.h>
    void temp(int arr[])
    {
        int i;
        for(i=0; i<5; i++)
        {
            printf("%d\n", arr[i]);
        }
    }
    int main()
    {
        int arr[5] = {1,2,3,4,5};
        temp(arr);
        return 0;
    }

    2.数组中的元素当作函数参数,即把数组中的参数传入函数中,例如:

    #include<stdio.h>
    void temp(int arrValue)
    {
        printf("%d\n",arrValue);
    }
    int main()
    {
        int arr[5] = {1,2,3,4,5};
        temp(arr[3]);
        return 0;
    }

    数组作为函数参数时注意以下事项:

    1.数组名称作为函数实参传递时,函数定义处作为接受函数的数组类型形参既可以指定长度也可以不指定长度。

    2.数组元素作为函数实参传递时,数组元素类型必须与形参数据类型一致。

    任务:

    替换指定数组中的最大元素。要求指定整数为数组arr2中的第一个元素arr[0]。

    #include<stdio.h>
    void replaceMax(int arr[],int value)
    {
        int max = arr[0];
        int index = 0;
        int i;
        for(i=1;i<5;i++)
        {
            if(arr[i]>max)
            {
            max = arr[i];
                index = i;
            }
        }
        arr[index] = value;
    }
    int main()
    {
        int arr1[] = {10,41,3,12,22};
        int arr2[] = {1,2,3,4,5};
        int i;
        replaceMax(arr1,arr2[0]);
        for(i=0;i<5;i++)
        {
            printf("%d ",arr1[i]);
        }
        return 0;
    }

    展开全文
  • 经常忘记数组作为函数参数进行传递的函数声明格式,索性写一篇博文记录一下。 例如以下代码块: 其中*nSendByte作为数组进行传递。在读取数组中特定位置的数值时采用语句: S0BUF = *(nSendByte + i);//i代表第几...

    经常忘记数组作为子函数参数进行传递的函数声明格式,索性写一篇博文记录一下。
    例如以下代码块:
    其中*nSendByte作为数组进行传递。在读取数组中特定位置的数值时采用语句:
    S0BUF = *(nSendByte + i);//i代表第几个数值。

    		void UART0_Send_NByte(unsigned char n,unsigned char *nSendByte)  
    		{
    				unsigned char i = 0;
    				for(i = 0; i < n; i++)
    				{
    					S0BUF = *(nSendByte + i);
    					while(!f_uart0_tx_ok);																				//等待发送完成
    					f_uart0_tx_ok = 0;
    				}		
    		}
    

    调用方式举例如下:LED_VALUE_BUF为数组名称

    UART0_Send_NByte(LED_VALUE_BUF[1],LED_VALUE_BUF);
    
    展开全文
  • 1.不多说上代码 #include typedef enum { female,male }Sextype;...(我想学到结构体这个地方了,指针应该比较熟悉了吧,如果不理解为什么首地址加上长度可以表示数组的原因,可以搜索数组传入函数这个问题)

    1.不多说上代码

    #include<stdio.h>
    typedef enum
    {
    	female,male
    }Sextype;
    typedef struct
    {
    	Sextype sextype;
    	int Number;
    }School;
    typedef struct
    {
    	int MaleSum;
    	int FemaleSum;
    	int AllSum;
    }Num;
    Num Sumscore(School* sn, int n);
    int main()
    {
    	Sn shool[3] = { {female,10},{male,15},{female,20} };
    	Num num;
    	num = Sumscore(shool,3);
    	printf("male=%d,female=%d,all=%d\n", num.MaleSum,num.FemaleSum,num.AllSum);
    	return 0;
    }
    Num Sumscore(School* sn,int n)
    {
    	Num temp = {0,0,0};
    	for (int i = 0; i < n; i++)
    	{
    		if (sn[i].sextype == female)
    			temp.FemaleSum += sn[i].Number;
    		else
    			temp.MaleSum += sn[i].Number;
    		temp.AllSum += sn[i].Number;
    	}
    	return temp;
    }
    

    如果初学者对typedef这个函数的使用不熟悉的话,下面这串代码去掉typedef

    #include<stdio.h>
    enum Sextype
    {
    	female,male
    };
    struct School
    {
    	enum Sextype sextype;
    	int Number;
    };
    struct Number
    {
    	int MaleSum;
    	int FemaleSum;
    	int AllSum;
    };
    struct Number Sumscore(struct School* sn, int n);
    int main()
    {
    	struct School school[3] = { {female,10},{male,15},{female,20} };
    	struct Number num;
    	num = Sumscore(school,3);
    	printf("male=%d,female=%d,all=%d\n", num.MaleSum,num.FemaleSum,num.AllSum);
    	return 0;
    }
    struct Number Sumscore(struct School* school,int n)
    {
    	struct Number temp = {0,0,0};
    	for (int i = 0; i < n; i++)
    	{
    		if (school[i].sextype == female)
    			temp.FemaleSum += school[i].Number;
    		else
    			temp.MaleSum += school[i].Number;
    		temp.AllSum += school[i].Number;
    	}
    	return temp;
    }
    

    结果运行效果截图:
    在这里插入图片描述
    运行没问题,这里解释一下如何把结构体数组作为参数传入函数,其实在C语言中,任何数组都可以用首地址加上数组长度的方式传入函数,结构体数组也是数组,同样可以以首地址加上数组长度的方式传入函数,需要注意是仅仅只有别把传入的数据类型给搞错了。(我想学到结构体这个地方了,指针应该比较熟悉了吧,如果不理解为什么首地址加上长度可以表示数组的原因,可以搜索数组传入函数这个问题)

    展开全文
  • C语言数组元素地址作为函数参数

    千次阅读 2016-08-10 11:40:07
    今天首先来做一个题,值得借鉴。...//打印第六个元素,但是地址传入的第四个元素, getchar(); } void main() { int a[10] = {1,2,3,4,5,6,7,8,9,10}; fun(&a[3]); //把数组的第4个元素的地址传
  • c语言中怎么把一个大小不确定的二维数组当作参数传入函数中,取大神,取大神,取大神
  • #includevoidreplaceMax(intarr[],intvalue){intmax=arr[0];intindex=0;inti;for(i=1;i<5;i++){if(arr[i]>...//将数组中较大的数赋值给maxindex=i;//记录当前索引}}arr[index]=value;}intmai...
  • C语言数组作为函数参数 ** 函数参数表中的数组即指针 先来看一段代码 #include<iostream> #include<cstdio> #include<cstring> using namespace std; void f(int b[]){ printf("%p\n",&b[0]...
  • 数组作为函数参数传递时,数组名会退化为指针 */ /** 运行结果: sizeof(acWelcome):30 strlen(acWelcome):19 sizeof(acWelcome):4 strlen(acWelcome):19 请按任意键继续. . . */ int main(int argc, char *...
  • C语言数组参数传递

    万次阅读 多人点赞 2018-01-29 19:57:23
    在学习C语言的过程中遇到数组作为参数传递的问题 一维数组:#include int test2(int a[]){ for(int i=0;i;i++){ printf("%d",a[i]); } } int main(){ int a[5] = {1,2,3,4,5},*p; p = a; test2(a); } ...
  • 1.把数组传参给函数可以定义一个QVector的一个数组QVector num(10);for(int i =0;i<10;i++)num [i] = i*i;fun(num); //直接传参数给fun(函数)void fun...函数返回一个数组首先在c++中是不允许数组作为函数的返回...
  • C语言二维数组作为函数参数传递

    万次阅读 多人点赞 2018-06-07 21:43:37
    二维数组作为函数参数,实参可以直接使用二维数组名,在被调用函数中可以定义形参所有维数的大小,也可以省略以为大小的说明。例如: void find(char a[3][10]); void find (char a[ ][10]); 也可以使用数组...
  • 数组参数属于指针参数,指针参数即时传址参数(或叫引用参数), 如果想在函数中修改参数的值, 这是唯一的途径.如果把数组当作参数, 不管愿意与否, 它就是指针, 指向第一个值的指针.1. 数组参数就是指向第一个元素的...
  • 因为C语言发明的初衷是替换汇编语言,要知道你用不同指令集的机器就要用不同的汇编语言。。。(此处省略800字议论文)我们想一想,当我们声明定义一个数组时,定义了数组的哪些int array[10] = {0};从上面的代码中我们...
  • C语言数组作为函数参数的问题

    千次阅读 2015-07-02 00:04:58
    C语言数组作为函数参数运行的时候, 函数在执行的过程中,数组参数是否像其他类型的参数(例如:int类型)不发生改变的执行呢? 我们首先看一个示例,然后观看他的打印结果,然后分析原因二,代码示例和运行结果/* C语言中...
  • 并且,这表明C语言数组作为参数传递给函数时,是作为引用方式传递的。 还有,在传递的时候,还需要把数组的大小也一并传递给函数。因为只传递数组函数,进而想要在函数中获得数组大小,在网上搜了一下,答案居然...
  • C语言数组函数参数

    2018-02-04 16:26:51
    数组作为函数形参的时候,传入的是一个地址值,而不是一个整个的数组,void exp(int a[])=void exp(*a).
  • C语言数组作为参数传递

    万次阅读 2018-11-24 14:06:24
    1、整个数组当作函数参数,即把数组名称传入函数中,例如:   2、数组中的元素当作函数参数,即把数组中的参数传入函数中,例如: 数组作为函数参数时注意以下事项: 1、数组作为函数...
  • C语言中,数组作为参数传递给函数时,数组名会退化为指针;需要数组大小时,需要一个参数传数组名,另一个传数组大小。 实际上,C语言不支持数组名作为形参来进行调用。例如函数void fun(int a[]),里面的a实际上...
  • 我正在尝试为类调用创建一个构造函数,其中4个数组作为参数传递.我尝试过使用*,&和数组本身;但是,当我将参数中的值分配给类中的变量时,我收到此错误:call.cpp: In constructor ‘call::call(int*, int*, char*, ...
  • 如题,想要实现在C#下的数组作为参数输入,实现类似于C语言数组参数偏移的效果,函数中主要实现的功能是将数组中某个位置修改。C代码的如下所示的效果: #include <stdio.h> void arrayTest(char arr...
  • 问题是:java中为什么不像C一样可以利用把数组传入函数(方法)的手段改变被传入数组相应元素的值;不是说java中数组的名字也是数组元素的「管理者」吗,比如: int array1[5]=new int[]{1,2,3,4,5,}; int[] ...
  • 1)、将整个数组拷贝一份传入函数(不可取的,需要遍历一遍数组,效率会降低) 2)、将数组名看作常量指针传递数组首元素的地址 C语言以高效作为最初的设计目标: 1)、参数传递的时候如果拷贝整个数组执行效率将会...
  • C语言数组参数与指针参数 我们都知道参数分为形参和实参。形参是指声明或定义函数时的参数,而实参是在调用函数时主调函数传递过来的实际值。
  • C语言数组作为参数进行函数传递在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。在用数组名作函数参数时...
  • 整个数组作为参数传入函数中的时候,实参为数组名。 可是在指针与数组一章中讲到数组名是首元素的地址,相当于&array[0],这样的话传入的就是首元素地址了 请问为什么函数在识别数组时遇到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,281
精华内容 14,912
关键字:

c语言数组作为参数传入函数

c语言 订阅