精华内容
下载资源
问答
  • 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
    
    展开全文
  • #include const int ArSize = 8; int sum_arr(int arr[], ... 所以,在编写c++程序时,不能像python那样,直接传整个数组,然后length(arr)(此时arr只是一个指针,无法知道数组大小),必须要显式地指出数组的长度。
    #include <iostream>
    const int ArSize = 8;
    int sum_arr(int arr[], int n);
    
    int main()
    {
       int cookies[ArSize] = {1,2,4,8,16,32,64,128};
       std::cout << cookies << " = array address, ";
       std::cout << sizeof cookies << " = size of cookies\n";
       int sum = sum_arr(cookies, ArSize);
       std::cout << "Totsl cookies eaten: " << sum << std::endl;
       return 0;
    }
    
    int sum_arr(int arr[], int n)
    {
       int total = 0;
       std::cout << arr << " = arr, ";
       std::cout << sizeof arr << " = sizeof arr\n";
       for (int i = 0; i < n; i++)
          total = total + arr[i];
       return total;
    }
    

    比如这里,输出结果为

    0x7fffffffddc0 = array address, 32 = size of cookies
    0x7fffffffddc0 = arr, 8 = sizeof arr
    Totsl cookies eaten: 255
    

    这意味着,std::cout << sizeof arr << " = sizeof arr\n"; 这里的arr实际上只是一个指向数组第一个元素地址的指针。sizeof arr等于8意味着这个指针的大小为8字节(对应64位操作系统)。而上面的 std::cout << sizeof cookies << " = size of cookies\n"; sizeof cookies指的是整个数组大小为32。
    所以,在编写c++程序时,不能像python那样,直接传整个数组,然后length(arr)(此时arr只是一个指针,无法知道数组大小),必须要显式地指出数组的长度。

    展开全文
  • 在写一个简单的选择排序时,发现如果不在调用排序函数传入数组大小,程序得不到预期结果,经过调试,发现原来在不同地方sizeof(A)的结果是不同的,具体如下 #include<cstdio> #include<iostream> ...

    在写一个简单的选择排序时,发现如果不在调用排序函数时传入数组大小,程序得不到预期结果,经过调试,发现原来在不同地方sizeof(A)的结果是不同的,具体如下

     #include<cstdio>
     #include<iostream>
     using namespace std;
     
    void selectSort(int A[],int n){
    	//int n = sizeof(A)/sizeof(A[0]);
    	for(int i = 0; i< n; i++){
    		int k = i;
    		for(int j = i; j < n; j++){
    			if(A[j]<A[k])
    				k = j;
    		 } 
    		 int temp = A[k];
    		 A[k] = A[i];
    	 	 A[i] = temp;	 
    	 }
    
    } 	
    
    int main(){
    	int A[5] = {1,3,2,5,4};
    	int n = sizeof(A)/sizeof(A[0]);
    	cout<<sizeof(A)<<endl;
    	//cout<<n<<endl;
    	selectSort(A, n);
    	for(int i = 0; i < 5; i++){
    		cout<<A[i]<<endl;
    	}
    } 
    

    在mian函数中,sizeof(A)是所有数组元素所占用的内存空间字节数,因此可以通过sizeof(A)/sizeof(A[0])计算数组大小,而在定义的函数体内,sizeof(A)是A这个指针类型的大小,不能计算数组大小。

    展开全文
  • 数组函数调用


    C++学习之函数的数组调用----

     

    当函数中的某个参数是数组时,在参数名后加上一对中括号,比如int a[],表示参数a是一个数组。下面我们就来看这样一个在一堆正数里面找一个最大数的程序:(

    (
    	#include "iostream.h"
    	int max(int a[],int size);//size是数组的大小
    	int main()
    	{
    	   int number[]={2,45,12,6,23,98,13,3};
    	   cout <<max(number,sizeof(number)/sizeof(int)) <<endl;//求数组的长度
    	   return 0;
    	}
    	int max(int a[],int size)
    	{
    	   int max=0;
    	   for (int i=0;i<size;i++)
    	   {
    	      if (a[i]>max)
    	      max=a[i];
    	   }
    	   return max;
    	}
    

    运行结果:

                      98

                     

                      我们发现,在函数里使用数组也是比较方便的。但大家有没有考虑过一个问题,我们为什么不在函数里面sizeof算出数组的大小,而非要在函数外面算好了,再作为参数传递给函数呢?在这里,我们就有必要讲一下数组作为参数传递给函数的原理了。

    *我们以前说过,参数的传递是将实参的值赋给形参。然而对于数组来说却是一个例外,因为数组的数据太多了,将其一一赋值既麻烦又浪费空间,所以数组作为参数传递给函数的只是数组首元素的地址,函数在需要用到后面元素时再按照这个地址和数组下标去查找。也就是说后面的元素根本没到函数里来,所以在函数里求不出数组的大小也就不足为奇了。

    在函数中将内存中的数据作了操作,所以影响到了实参。

     

    可以说数组当作为函数形参的时候,可以当做指针看待



    展开全文
  • 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#函数传入数组C++动态库

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

    千次阅读 2013-06-05 10:12:37
    c++编程的时,很多时候,我们需要给给一个函数传入一个数组的长度,不过因为c和c++在传入时,只是将数组的头指针地址(或者引用)传入,我们就无法确知数组长度了。也许有些人表示怀疑,接下来我们来看下面的一个...
  • C++中,如果要给一个函数传入一个数组,一般都是传入两个参数一个数组指针和一个数组大小 例: void print_1 (int n, int *datas ) {  for (int i = 0; i  {  std::cout  }  std::cout } 对这个函数...
  • C/C++中想要一个函数返回数组,此类问题,应用场景往往为了解决函数间相互通信,比如某个函数内处理的完的结果数据需要交接给另一个函数的情况,方法大概有三种:(例如在函数func中对a[]数组进行赋值,之后可以再对...
  • 我们都知道计算数组长度的时候使用的公式是 sizeof(变量)/sizeof(类型) 然后他就会返回一个数组的lenght 先入JAVA为主的我理所当然认为逻辑是这样的 int intLenght1(int x[]) { return sizeof(x)/sizeof(int); ...
  • C++ 函数传递数组的方法

    千次阅读 2019-03-20 16:43:37
    使用数组作为函数传递参数 数组作为参数,传递的是数组第一个元素所在位置的物理地址,而不是数组的值 指向这个地址的变量就叫做指针变量 在定义函数的时候,要使用定义指针的格式 int add_a(int *a, int l) { int ...
  • 很多人c和c++的初学者都知道这样一个事实:数组不能直接作为函数的形参,当传入一个数组名时,数组会退化为对应的指针类型。 例如考虑如下函数:void chuanrushuzu(int a[10]) { return;//没有实质内容,只是为了...
  • 数组与指针。 传首地址过去,然后通过地址输出数组元素。 1、一维数组 #include<iostream> using namespace std; #include <cstring> void farray1(int array1[],int len)//注:此处是无法通过...
  • 可以发现,报红色,AndroidStudio希望我们继续创建sendIntArrayToJNI()的C++函数。 快捷生成对应的C++函数 鼠标放到红色上面:alt + enter 生成的C++函数如下 extern "C" JNIEXPORT jstring JNICALL Java_...
  • C++函数数组

    千次阅读 2019-01-25 14:21:03
    在日常编码过程中,我们经常使用到数组,以C++的基本数据类型作为存储对象,而在某些特殊的情况下,我们需要使用到函数数组函数指针(譬如回调函数),其实质为一个指针数组数组内存储着各个函数的指针地址,在...
  • C++函数传递数组

    千次阅读 2017-10-14 16:38:55
    C语言中不能向函数传递数组,但是C++中是可以的。这样就方便了许多 C语言函数操作数组: C例1:C语言 通过指针访问一维数组,二维数组,三维数组。 C例2:C语言 使用指针遍历二维数组 /** C++使用数组作为...
  • 函数的参数可以是数组,且数组作为参数传入时,参数中数组的第一维不需要填写长度,如果是二维,那么第二维需要填写长度,在实际调用时也只需填写数组名。最重要的是,数组作为参数时,在函数中对数组元素的修改就...
  • 例子:将任意长度的整形数组传递给求和函数sum,返回数组中所有元素之和。 写法1: #include <iostream> using namespace std; int sum(int arr[]) { int sum = 0; int len = sizeof(arr) / sizeof(arr[0])...
  • cout 传入数组单个元素的大小是:" (datas[0]) ; } 上述代码计算的结果是: 主函数中数组的大小是:40 主函数中数组地址的大小是:4 传入数组的大小为:4 传入数组单个元素的大小是:8  

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,290
精华内容 26,116
关键字:

c++函数传入数组

c++ 订阅