精华内容
下载资源
问答
  • c++函数传入数组
    2022-04-06 21:44:29

    sizeof’ on array function parameter ‘arr’ will return size of ‘int*’ [-Wsizeof-array-argument]

    数组作为参数传给函数时,是传给数组的地址,而不是传给整个的数组空间,因而
    sizeof(arr)这句话会报错
    正确的用法是:不在函数内部使用sizeof

    更多相关内容
  • C++ 函数传递数组

    2022-08-02 13:05:04
    C++ 函数传递数组 注意初始化不能直接写 memset(a,0x3f,sizeof a) 这样不会初始化 a a a 的所有元素。 应该写成:memset(a,0x3f,N* sizeof(int)) 且注意函数参数为:int a[] ,函数内修改数组会影响,就是传的引用。

    C++ 函数传递数组

    注意初始化不能直接写

    memset(a,0x3f,sizeof a)

    这样不会初始化 a a a 的所有元素。

    应该写成:memset(a,0x3f,N* sizeof(int))

    且注意函数参数为:int a[] ,函数内修改数组会影响,就是传的引用。

    展开全文
  • C++传入数组函数和从函数返回数组 本文参考了链接: https://blog.csdn.net/lijiayu2015/article/details/52821562 https://www.cnblogs.com/yangxi/archive/2011/09/18/2180759.html 表示感谢。 1级标题 ...

    C++传入数组给函数和从函数返回数组

    作者:Luyu

    C++中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函数返回指针来实现。指针存放着数组的首地址,指针这个变量就是存地址的容器。

    以下博文对我有所帮助,对作者表示感谢。
    怎样让函数返回数组 - 博客园
    怎样让函数返回数组 - CSDN
    以上链接只讲述了如何从函数A返回数组arr[]至main(),但是没有讲如何将main()中的返回的数组arr[]再次传入另一个函数B。

    1 目的

    C++中经常遇到数组在函数之间的传递问题。
    为了实现从主函数main()调用函数A和函数B,其中,函数A返回数组,返回值为数组的首地址(指针x),将其返回至main(),然后再将此数组以指针方式传入函数B,调用关系如下:
    main() ------> 调用函数A ------> 返回数组arr[] ------> 传入函数B ------> 在函数B中读取arr[]

    2 代码

    主函数main.cpp

    #include <iostream>
    #include <cmath>
    
    #include "coords_cen.h"
    #include "display.h"
    
    using namespace std;
    
    int main ()
    {
        // parameter of the physical problem
        double L = 1.0;
        double N = 20.0;
        double Dx = L/N;
        // define a pointer
        double* p1 ;
        // function coords_cen.cpp, return value of the function point to a pointer
        p1 = coords_cen(Dx,N,L);
        // function display.cpp, 
        // transfer the p1 (pointer/firstaddress of the array)
        display(Dx,N,L,p1);
    
    
        return 0;
    }
    

    函数coords_cen.cpp

    /*  the return value of this function
    is a pointer, which point to the first
    address of the return value (array)  */
    
    /* where the array x[] was generated by
    the dynamic array*/
    
    #include <iostream>
    #include "coords_cen.h"
    using namespace std;
    
    double* coords_cen(double Dx,double N,double L)
    {
        const int n=N;
        // static double x[n]; // another option
        double* x = new double[n]; // dynamic array
    
        for (int i=0; i<=(n-1); i++)
        {
            x[i] = (Dx/2)*(2*i+1);
        }
    
        return x;
        delete []x;
    }
    

    由于C++规定不允许返回一个未知长度的数组,因此无法使用以下方式在函数中定义数组:

    	double x[n]; 
    

    必须采取static限定:

    	static double x[20]; // n=20
    

    但是实际编程中不可能指定n的大小,因此解决的关键就是动态数组:

        double* x = new double[n]; // dynamic array
    

    这就解决了数组返回值的问题,实际上返回的是数组的首地址/指针/数组名。
    使用完毕后将其删除:

        delete []x;
    

    函数display.cpp

    // location of element's centers and interfaces
    #include <iostream>
    #include "display.h"
    using namespace std;
    
    void display(double Dx,
                 double N,
                 double L,
                 double* coords_cen)
    {
    
        cout<<"Dx: "<<Dx  <<endl;
        cout<<"N:  "<<N  <<endl;
        cout<<"L:  "<<L <<endl;
    
        for (int i=0; i<=(N-1); i++)
        {
            cout<<"coords_cen["<<i<<"]: "<<*(coords_cen+i)<<endl ;
        }
    }
    

    头文件coords_cen.h

    #ifndef COORDS_H_INCLUDED
    #define COORDS_H_INCLUDED
    
    double* coords_cen(double Dx,double N,double L);
    
    #endif // COORDS_H_INCLUDED
    

    头文件dispaly.h

    #ifndef DISPLAYVAR_H_INCLUDED
    #define DISPLAYVAR_H_INCLUDED
    
    void display(double Dx,
                 double N,
                 double L,
                 double* coords_cen);
    
    #endif // DISPLAYVAR_H_INCLUDED
    
    展开全文
  • C++ 函数数组形参

    2021-08-31 22:26:19
    不允许数组的拷贝和赋值:不能将数组的内容拷贝给其他数组作为其初始值,也不能用数组为其他数组赋值。(一些编译器支持数组的赋值,这就是所谓的编译器扩展,最好避免使用非标准特性) int a[] = {0 ,1 ,2}; // ...

    1. 数组有两个特殊的性质:

    • 不允许数组的拷贝和赋值:不能将数组的内容拷贝给其他数组作为其初始值,也不能用数组为其他数组赋值。(一些编译器支持数组的赋值,这就是所谓的编译器扩展,最好避免使用非标准特性)

      int a[] = {0 ,1 ,2};	// 含有三个整数的数组
      int a2[] = a;	//【错误】 不允许使用一个数组初始化另一个数组
      a2 = a;		// 【错误】不允许把一个数组的值,直接赋给另一个数
      
    • 使用数组时,通常会将其转化成指针。

    通过以上两个性质可以看出,数组无法拷贝,因此数组无法以值传递的方式使用数组参数。因为数组会被转换成指针,所以当我们为函数传递一个数组时,实际上传递的是指向数组首元素的指针。

    2.函数数组形参的传递

    尽管不能以值传递的方式传递数组,但是可以写成形参类似数组的形式:

    // 尽管形式不同,但是这三个print函数是等价的
    // 每个函数都有一个const int*类型的形参
    void print(const int*);		
    void print(const int[]);			// 可以看出,函数的意图是作用于一个数组
    void print(const int[10]);			// 这里的维度表示我们期望数组含有多少个元素,实际上不一定
    

    尽管表现形式不同,但上面三个参数是等价的:每个函数唯一的类型的形参都是 const int* 类型的。函数在运行时,只检查传入的参数是否为const int*

    注意:和其他使用数组的代码一样,以数组作为形参的函数也必须保证使用数组时不会越界。

    因为数组,是以指针的形式传递给函数的,所以数组一开始并不知道数组的确切尺寸。通常有三种方法对数组进行管理。

    • 使用标记制定数组长度
    void print(const char *cp)
    {
        if(cp)					//  若cp不是一个空的指针
            while(*cp)			 //  指针所指的字符不是空字符
                cout << *cp++;	  //  输出当前字符并将指针向前移动一个位置
    }
    

    该种方法只适用于那些有明显结束标记不会与普通数据混淆的情况,但是对于像int这种所用取值都合法的数据就不太好处理了。

    • 使用标记制定数组长度
    void print(const int *beg, const int *end)
    {
        //输出beg到end之间(不含end)的所有元素
        while(beg != end)
            cout << *beg++ << endl;
    }
    
    • 显示传递一个表示数组大小的形参
    //const int ia[] 等价于const int* ia
    // size 表示数组的大小,将它显示地传给函数用于控制对ia元素的访问
    void print (const int ia[], size_t size)
    {
        for(size_t i = 0; i != size; ++i)
        {
            cout << ia[i] << endl;
        }
    }
    

    3.函数数组的引用传值

    C++语言允许将变量定义成数组引用,基于同样的道理,形参也可以是数组的引用。此时,引用形参绑定到对应的实参上,也就是绑定到数组上。

    // 正确: 形参是数组的引用,维度是类型的一部分
    void print(int (&arr)[10])			// 特别注意 &arr两端的地址不能省略
    {
        for(auto elem : arr)
        {
    		cout << elem << endl; 
        }
    }
    

    上述写法,数组的大小构成数组的一部分,只要不超过维度,就可以在函数体内,放心使用数组。但是,这一用法无形中,限制了print函数的可用性,我们只能将函数作用于大小为10的数组。

    int i = 0, j[2] = {0, 1};
    int k[10] = {0,1,2,3,4,5,6,7,8,9};
    print(&i);			//【错误】: 实参不是含有10个整数的数组
    print(j);			//【错误】: 实参不是含有10个整数的数组
    print(k);			//【正确】: 实参含有10个整数的数组
    

    参考:《C++ primer》

    展开全文
  • C++ 函数传递数组的方法

    千次阅读 2019-03-20 16:43:37
    使用数组作为函数传递参数 数组作为参数,传递的是数组第一个元素所在位置的物理地址,而不是数组的值 指向这个地址的变量就叫做指针变量 在定义函数的时候,要使用定义指针的格式 int add_a(int *a, int l) { int ...
  • C++ 函数中传递数组

    2022-01-19 16:51:41
    #include<iostream> #include<math.h> using namespace std; int arr[10]; void p(int arr[]){ int l = sizeof(arr); for(int i = 0;i<l;i++) cout<<arr[i]<...i++) cou.
  • C++学习
  • 我们知道,当我们将数组作为参数传递为一个函数后,数组会退化为指针。这样就导致我们无法正确在函数中计算数组的大小。 #include<iostream> using namespace std; int func(int* arr) { return sizeof(arr);...
  • C++ 二维数组参数传递的实现方法 int a[2][2]={ {4, 6}, {9, 11} }; 我定义了这样一个数组,我想把这个数组作为参数,传递到一个函数中,并要在函数中能引用该二维数组的元素,我该怎么做?  第一种方式是直接传递...
  • 最近学习c++时遇到传递数组函数的问题,将数组作为实参传递给函数时,传递的是数组首地址,对形参使用sizeof()函数会返回数组变量的字节长度。 解决办法为: 问题描述 学习场景: 学习左神刷题挑战时,练习选择...
  • C++ 用引用的方式向函数传递数组

    千次阅读 2020-08-25 08:09:06
    #include <iostream> using namespace std; int a[10] = { 10,20 }; void GetCharArr(char (&ac)[20]) { sprintf_s(ac, "ABABXX%d", a[0]); } int main() { char str1[20];... system("...
  • C++函数传递数组

    千次阅读 2018-12-09 17:18:54
    C++函数传递数组 数组的存储空间很大,如果能够把它作为参数传递给函数,那么就能发挥很大的作用了。比如本来一个选出最大数的max函数只能在两个数或三个数里面选出一个最大的数字,如果我们把数组传递过去,它就...
  • 函数的参数可以是数组,且数组作为参数传入时,参数中数组的第一维不需要填写长度,如果是二维,那么第二维需要填写长度,在实际调用时也只需填写数组名。最重要的是,数组作为参数时,在函数中对数组元素的修改就...
  • C#函数传入数组C++动态库

    千次阅读 2019-09-03 15:58:59
    传入引用数组参数,函数声明: public bool GetStatus(short channelId, ref CardStatus[] cardStatus, out int count) { //..... }
  • C++:传递数组函数

    2021-09-12 17:52:54
    C++数组给一个函数数组类型自动转换为指针类型,因而传的实际是地址。 如果想要在函数中传递一个一维数组作为参数,必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会...
  • C++函数传递数组

    万次阅读 2017-10-14 16:38:55
    C语言中不能向函数传递数组,但是C++中是可以的。这样就方便了许多 C语言函数操作数组: C例1:C语言 通过指针访问一维数组,二维数组,三维数组。 C例2:C语言 使用指针遍历二维数组 /** C++使用数组作为...
  • 在写一个简单的选择排序时,发现如果不在调用排序函数传入数组大小,程序得不到预期结果,经过调试,发现原来在不同地方sizeof(A)的结果是不同的,具体如下 #include<cstdio> #include<iostream> ...
  • c++ 函数返回数组

    万次阅读 2018-01-04 11:12:35
    C++函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函数返回指针来实现。 不能直接返回函数中定义的数组,会被释放掉 float* add(a[3],b[3]) { float sum[4]; sum[0]=a[0]+b[0]; sum[1]=
  • c++ 基础知识-指针函数数组 1.指针数组 #include <iostream> using namespace std; int main() { int arr[] = {1,2,3,4,5,6,7,8,9,10}; int * p = arr; cout<<*p<<endl; for (int i = 0;i...
  • C++函数数组

    千次阅读 2019-01-25 14:21:03
    在日常编码过程中,我们经常使用到数组,以C++的基本数据类型作为存储对象,而在某些特殊的情况下,我们需要使用到函数数组函数指针(譬如回调函数),其实质为一个指针数组数组内存储着各个函数的指针地址,在...
  • 本人目前在自学c++,在学习结构体时碰到了一个小问题,先来看问题: 案例描述: 设计一个英雄的结构体,包括成员姓名,年龄,性别;创建结构体数组数组中存放5名英雄。 通过冒泡排序的算法,将数组中的英雄按照年龄...
  • C++构造函数数组

    千次阅读 2020-09-26 21:32:11
    // 构造函数和数组 #include<iostream> using namespace std;/*是一个语句*/ class CTest { public : int a; int m_=-1, n_=-1; public: /*没有返回值且和类同名的得构造函数可以定义在类里头(但是要区别...
  • C++传参之引用数组

    千次阅读 2021-11-02 10:19:42
    C++中,有时候我们需要将数组作为参数传递到函数里去,常规的做法是: void fun(int* a) { cout << sizeof(a); //这里会输出4,即a这个指针的大小 //接着对数组进行操作 } 但是这种做法丢失了一部分...
  • 很多人c和c++的初学者都知道这样一个事实:数组不能直接作为函数的形参,当传入一个数组名时,数组会退化为对应的指针类型。 例如考虑如下函数:void chuanrushuzu(int a[10]) { return;//没有实质内容,只是为了...
  • C++函数传入二维数组

    千次阅读 2018-11-29 11:49:15
    1、指定第二维的大小 //定义 void function(void a[][N]); //访问 a[i][k]; //其中 i 为行,j 为列 2、指向第二维大小为N的指针 //定义 void function(void (*a)[N]); //访问 a[i][j]; ......
  • c++ 向子函数传递数组

    2020-10-31 10:59:27
    向子函数传递一个数组时,数组是不会被拷贝的,一般来说都是传地址给子函数而已。 怎么规范地向子函数传递数组呢,一般来说,我们会给定数组地址,然后告诉子函数数组的长度之类的。 利用函数模板,可以实现不需告诉...
  • C++数组函数中通过指针的传递

    千次阅读 2020-04-15 17:03:31
    C++中,函数传递数组可以通过指针传递。 下面程序中,把一个 a = {1, 2,3} 的数组,通过a传给plus_one函数,plus_one函数拿指针b去接数组a的第一个元素的地址。plus_one函数中,可以直接通过 *(b + i) 在指针层面...
  • 精解C++中向函数数组函数的返回类型和返回语句,以及函数重载的相关知识。
  • c/c++二维数组传入函数方法

    千次阅读 2021-04-13 20:25:54
    平时核心代码写多了,写完整函数反倒不清晰二维数组的传递了。 1.简单传参 int aa(int a[][2]) { cout<<a[0][0]<<" "<<a[0][1]<<endl; } int main() { int a[5][2]={{1,2},{3,4}{5,6},{7,...
  • 参考老师讲课笔记: 数组长度计算: int nums[]{12,10,24,13,25,53};...函数传参(数组函数的传参:: 值传递(拷贝传递值) 1. 函数的参数在传递的时候,执行的都是拷贝的工作。 2. 默认情况下执行的是值的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 76,897
精华内容 30,758
关键字:

c++函数传入数组

c++ 订阅