精华内容
下载资源
问答
  • 最近在oracle 中用到拆分字符串返回数组,一直头痛,因为在 oracle 中没有类似java中有split 函数 ,所以要自己写。好不容搜到一个。那网上是到处都是这个代码。怎么找都是这个方法,我就用了。这个方法如下: ...
  • c 语言 函数返回数组 介绍 (Introduction) In this tutorial, we are going to understand how we can return an array from a function in C++. 在本教程中,我们将了解如何从C ++中的函数返回数组 。 在C ++函数...

    c 语言 函数返回数组

    介绍 (Introduction)

    In this tutorial, we are going to understand how we can return an array from a function in C++.

    在本教程中,我们将了解如何从C ++中的函数返回数组

    在C ++函数中返回数组的方法 (Methods to Return an Array in a C++ Function)

    Typically, returning a whole array to a function call is not possible. We could only do it using pointers.

    通常,无法将整个数组返回给函数调用。 我们只能使用指针来做。

    Moreover, declaring a function with a return type of a pointer and returning the address of a C type array in C++ doesn’t work for all cases. The compiler raises a warning for returning a local variable and even shows some abnormal behavior in the output.

    此外,在C ++中用指针的返回类型声明函数并返回C类型数组的地址并不适用于所有情况。 编译器会针对返回局部变量发出警告,甚至在输出中显示一些异常行为。

    Hence, returning an array from a function in C++ is not that easy. But we can accomplish that by following any of the below mentioned methods.

    因此,从C ++中的函数返回数组并不是那么容易。 但是我们可以通过遵循以下任何一种方法来实现。

    Let’s get right into it.

    让我们开始吧。

    1.使用指针 (1. Using Pointers)

    As we mentioned earlier, returning a normal array from a function using pointers sometimes gives us unexpected results. But this behaviour and warnings can be avoided by declaring the array to be a static one.

    如前所述,使用指针从函数返回普通数组有时会给我们带来意想不到的结果。 但是可以通过将数组声明为static数组来避免这种行为和警告。

    Let us see how.

    让我们看看如何。

    
    #include<iostream>
    using namespace std;
    
    int* demo() //return type- address of integer array
    {
    	static int a[5]; //array declared as static
    	for(int i = 0; i<5; i++)
    	{
    		a[i] = i; //array initialisation
    	}
    
    	return a; //address of a returned
    }
    
    int main()
    {
    	int* ptr; //pointer to hold address
    	int i;
    	ptr = demo(); //address of a
    	cout<<"Array is: ";
    	for(i=0 ; i<5; i++)
    		cout<<ptr[i]<<"\t"; //ptr[i] is equivalent to *(ptr+i)
    		
    	return 0;
    }
    

    Output:

    输出:

    
    Array is: 0     1       2       3       4
    

    Here, we have declared the function demo() with a return type int *(pointer) and in its definition, we have returned a (serves as both array name and base address) to site of the function call in main().

    在这里,我们用返回类型int * (指针)声明了函数demo() ,并在其定义中向main()中的函数调用位置返回a (同时用作数组名和基地址main()

    As we can see from the above output, the array is successfully returned by the function.

    从上面的输出中可以看到,该函数成功返回了数组。

    2.在C ++中使用结构 (2. Using a Structure in C++)

    We can also make a function return an array by declaring it inside a structure in C++. Let us see how.

    我们还可以通过在C ++中结构内部声明函数来使函数返回数组。 让我们看看如何。

    
    #include <iostream>
    using namespace std;
    
    struct demo
    {
    	//array declared inside structure
    	int arr[100];
    };
    
    struct demo func(int n) //return type is struct demo
    {
    	struct demo demo_mem; //demo structure member declared
    	for(int i=0;i<n;i++)
    	{
    		//array initialisation
    		demo_mem.arr[i] = i;
    	}
    	return demo_mem; //address of structure member returned
    }
    
    int main() 
    {
    	struct demo a;
    	int n=5; //number of elements
    	
    	a=func(n); //address of arr
    	
    	cout<<"The Array is : ";
    	for(int i=0;i<n;i++)
    	{
    		cout<<a.arr[i]<<"\t";
    	}
    	
    	return 0;
    }
    

    Output:

    输出:

    
    Array is: 0     1       2       3       4
    

    Here, note that we have declared the array arr inside the structure demo. And this time the function has a return type of the structure itself and return demo_mem (structure variable) instead of the array.

    在这里,请注意,我们已经在结构 demo声明了数组arr 。 这次函数具有结构本身的返回类型,并返回demo_mem (结构变量)而不是数组。

    In this way using another structure variable a, we can access the array arr in the main() function.

    这样,使用另一个结构变量a ,我们可以在main()函数中访问数组arr

    3.使用std :: array (3. Using std::array)

    For std::array in C++, returning the array name from a function actually translates into the the whole array being returned to the site of the function call.

    对于C ++中的 std::array ,从函数返回数组名称实际上转化为要返回到函数调用站点的整个数组。

    
    #include <iostream>
    #include<array>
    using namespace std;
    
    std::array<int,5> func() //function with return type std::array
    {
        std::array<int,5> f_array; //array declared
        
    	for(int i=0;i<5;i++)
    	{
    		//array initialisation
    		f_array[i] = i;
    	}
    
        return f_array; //array returned
    }
    
    int main() 
    {
    	std::array<int,5> arr; //array with length 5
    	
    	arr=func(); //function call
    	
    	cout<<"The Array is : ";
    	for(int i=0;i<5;i++)
    	{
    		cout<<arr[i]<<"\t";
    	}
    	
    	return 0;
    }
    

    Output:

    输出:

    
    Array is: 0     1       2       3       4
    

    Hence it is clear from the output, that the array return by the function func() was successful.

    因此,从输出中可以明显看出,函数func()返回的数组是成功的。

    结论 (Conclusion)

    So in this tutorial, we learned about the different methods by which we can return an array from a C++ function.

    因此,在本教程中,我们了解了可以从C ++函数返回数组的不同方法。

    For any further questions, feel free to use the comments below.

    如有其他疑问,请随时使用以下评论。

    参考资料 (References)

    翻译自: https://www.journaldev.com/39081/return-array-in-c-plus-plus-function

    c 语言 函数返回数组

    展开全文
  • 动态内存分配与动态数组2.1 动态内存分配2.2 动态数组2.3 内存与堆与栈二、自定义函数返回数组1.常见错误2.返回数组的函数三. 总结四. 参考 提示:以下是本篇文章正文内容,下面案例可供参考 一、静态数组和动态...


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、静态数组和动态数组

    1.静态数组的缺点

    1.数组长度必须事先制定,不能为变量,必须为常整数;
    2.传统定义的数组,其内存无法被程序员手动释放。在函数运行期间,系统为其分配的内存一直存在,直到函数运行结束,其内存被系统自动释放;
    3.数组的长度一定固定,将无法改变。数组的长度无法在函数运行的过程扩大或缩小;
    4.传统的定义的数组无法跨函数使用;
    

    2.动态内存分配与动态数组

    2.1 动态内存分配

    我们知道,C语言中构造一个静态整型数组可以表示为 int a[5];,但如果获得动态整型数组直接写成int a[len]是不对的,那么如何构造动态的长度可以选定的数组?就这需要动态内存分配。
    在C 语言中通过库函数malloc分配所需的内存空间,并返回一个指向它的指针。此函数的返回值是一个指针,指向分配空间的第一个字节的地址,所以该函数是一个指针型函数。

    malloc声明: void *malloc(size_t size)

    代码如下(示例1):

    #include <stdlib.h>
    malloc(100)//开辟100字节的动态内存,返回第一个字节的地址
    

    2.2 动态数组

    上面示例中:malloc(100)返回动态内存的100个字节中的第一个字节的地址即返回的指针指向动态内存的第一个字节。我们想要构造一个整型数组,通常整型数组的元素是4个字节即整型数组名指向4个字节而malloc的返回的值指向的是1个字节,显然直接使用malloc函数是无法直接构造一个整形数组,那么如何解决?
    注意到malloc函数的声明指出其返回的指针的基类型是void,即不指向任何类型的数据,只提供一个纯地址。所以我们可以更改基类型,若要构造动态整型数组,则将基类型更改为int,即(int *)malloc(100),此时malloc 函数的返回值指向4个字节(见示例2);若要构造动态浮点型数组,则将基类型更改为float,即(float *)malloc(100),此时malloc 函数的返回值指向8个字节;
    代码如下(示例2):

    #include <stdio.h>
    #include <stdlib.h>
    int main(void)
    {
        int len;
        int * pArr;
        printf("请输入数组的长度:\n");
        scanf("%d",&len);
        pArr = (int *)malloc(sizeof(int) * len);
        free(pArr);//手动释放程序员手动分配的内存
        return 0;
    }
    //此函数实现了动态数组的构造
    //pArr = (int *)malloc(sizeof(int) * len);相当于 int pArr[len];(只是起到等价的作用,这样写C语言中是不支持的)
    

    2.3 内存与堆与栈

    静态内存是栈中分配,动态内存是在堆中分配。

    二、自定义函数返回数组

    1.常见错误

    代码如下(示例3):

    int * Input(void)
    {
        int a[10];
        return a;
    }
    

    该函数为指针型函数。其定义静态数组并返回,由于静态数组(局部变量)在函数运行期间,系统为其分配的内存一直存在,直到函数运行结束,其内存被系统自动释放,所以我们无法接收这个数组.在Xcode中会得到下图的警告,所以我们使用这样的做法接收返回的数组。

    请添加图片描述

    2.返回数组的函数

    动态开辟内存在堆区,堆区不像中静态数组(局部变量)在栈区存储,系统根据它的生命周期自动收回,而是手动开辟,手动释放,这样就可以完全规避问题,具体实例如下:
    代码如下(示例4):

    int * Input(void)
    {
    
        int *a = NULL;
        int *p;
    
        a = (int *)realloc(a,sizeof(int)*10);
    
        for (p=a;p<a+10;p++)
        {
            scanf("%d",p);
        }
        return a;
    }
    

    需要注意的是:记得用完free掉,防止内存泄露!


    三. 总结

    C语言中通过堆区动态开辟内存解决函数的返回数组问题:我们通常用malloc来在堆区动态开辟内存,利用堆区“现用现开辟,用完手动收回”特点,实现灵活管理。

    四. 参考

    1.郝斌C语言教程
    2.谭浩强《C程序设计》
    3.CSDN :C语言自定义函数如何返回数组


    展开全文
  • C语言自定义函数如何返回数组

    千次阅读 2020-07-05 13:48:40
    使用 C 语言,在 main() 函数中调用了一个自定义的函数,想要从函数中获取其运行产生的字符串,直接返回数组是实现了的,最起码也要返回数组的地址。但是在自定义函数中创建数组后,该数组本身是一个局部变量,当...

    C语言自定义函数如何返回数组

    使用 C 语言,在 main() 函数中调用了一个自定义的函数,想要从函数中获取其运行产生的字符串,直接返回数组是实现不了的,最起码也要返回数组的地址。但是在自定义函数中创建数组后,该数组本身是一个局部变量,当该自定义函数的生命周期结束后,局部变量也就被回收了,即使返回了一个代表数组的地址,但实际上其指代的内容可能已经发生了变化。

    有三种方法可以实现自定义函数成功返回数组:
    1、将数组定义为全局变量;
    2、使用malloc在堆区开辟动态空间;
    3、在调用函数时传入数组地址。

    ----->如果在需求允许的情况下,直接将数组定义为全局变量是最快的,直接在程序前声明即可。

    ----->使用malloc在堆区开辟动态空间:

    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    
    char *getArr()
    {
    	char *p;
    	p = (char *)malloc(10);
    	strcpy(p, "12345");
    	return p;
    }
    
    
    int main()
    {
    	char *p;
    	p = getArr();
    	printf("%s",p);
    	free(p);
    	return 0;
    }
    

    ----->在调用函数时传入数组地址:
    在主函数中定义了一个数组,然后在调用自定义函数时,将该数组的地址当作参数传递过去,这样也可以成功的使用数组中的内容,并在自定义函数生命周期结束后将内容返回。

    #include <stdio.h>
    #include <string.h>
    
    char *getArr(char *p)
    {
    	strcpy(p, "12345");
    	return p;
    }
    
    
    int main()
    {
    	char arr[10] = {};
    	getArr(arr);
    	printf("%s",arr);
    	return 0;
    }
    

    此外,如果仅仅想使用自定义函数中声明的字符串常量,可以直接用函数返回其地址即可,因为字符串常量是存放在常量区,空间不随着自定义函数的结束而回收。

    展开全文
  • C语言从函数返回数组的方法

    千次阅读 2020-06-23 15:50:51
    C 语言允许返回一个完整的数组作为函数的参数。但是,可以通过指定带索引的数组名来返回一个指向数组的指针。 另外,C 支持在函数返回局部变量的地址,除非定义局部变量为 static 变量。 示例: u8 *...

    C 语言不允许返回一个完整的数组作为函数的参数。但是,可以通过指定不带索引的数组名来返回一个指向数组的指针。
    另外,C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。
    示例:

     u8 *testarr;
     u8 i;
     u8 *test()
     {
         static u8 a[4]={0x11,0x22,0x33,0x44};
         
         return a;
     }
     testarr = test();
     for(i = 0; i < 4; i ++)
     {
     	printf("testarr = %02x\r\n", teastarr[i]);
     }
    

    执行后的打印结果
    在这里插入图片描述

    展开全文
  • c数组作为函数参数返回数组 Arrays in Delphi allow us to refer to a series of variables by the same name and to use a number (an index) to tell them apart. Delphi中的数组允许我们使用相同的名称引用一...
  • 下面小编就为大家带来一篇用JS编写一个函数,返回数组中重复出现过的元素(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 调用函数返回数组

    2020-07-19 16:12:51
    调用函数返回数组 1、传递函数 #include<stdio.h> #define maxn 4 void rink(int a[maxn]) { for(int i=0;i<maxn;i++) a[i]=a[i]+1; } int main() { int num[maxn]={4,6,7,8} rink(num); for(int i=0...
  • Name: 使用指针返回数组的方法。 Copyright: Author: 赵晨泽 Date: 01/07/20 20:39 Description: */ #include<bits/stdc++.h> using namespace std; int * input( ); int main( ) { int n = 10; int * num = ...
  • C从函数返回数组

    万次阅读 多人点赞 2018-11-08 11:05:04
    如果您想要从函数返回一个一维数组,必须声明一个返回指针的函数,如下: int * myFunction() { } 另外,C 支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。 现在,让我们来看下面的函数...
  • Shell 向函数传数组参数和返回数组

    千次阅读 2020-08-11 23:04:13
    如果将数组变量作为函数的参数,函数只会取数组变量的第一个值 testArray(){ echo "函数入参为:$@" } myarray=(1 2 3 4) echo "原始数据为:${myarray[*]}" testArray $myarray ![结果]...
  • vb.net函数返回数组

    千次阅读 2018-10-18 17:11:13
    今天写了一个程序需要函数返回数组,看了别的网友的程序发现有bug,特此记录一下   返回函数写法 Private Function Fun_Fp32ToByte(ByVal fp32 As Single) As Byte() Dim byt(3) As Byte byt = System....
  • C++ 函数返回数组处理方法

    千次阅读 2020-12-22 14:31:24
    最近在通过函数返回数组时踩到了一些坑,在此记录一下。 首先C++函数的返回类型没有“数组”这一结构,因此一般情况下我们会采用指针去接受数组的首地址来进行返回。另外由于函数体内定义的变量均为局部变量,局部...
  • C 从函数返回数组 C 数组 C 语言允许返回一个完整的数组作为函数的参数。但是,您可以通过指定带索引的数组名来返回一个指向数组的指针。我们将在下一章中讲解有关指针的知识,您可以先跳过本章,等了解了 C ...
  • 虽然知道函数不能返回数组,之前都是使用引用或者形参传入的数组地址,直接修改,函数返回时就不需要考虑返回数组。 这几天看到函数返回值这一章节,感觉也需要掌握返回数组指针这一方法。 因为数组不能被拷贝,所以...
  • C/C++语言自定义函数如何返回数组

    千次阅读 2018-08-29 11:24:59
    直接使用全局变量:这种方法最方便,但此方法打破了函数间的通信及封装的思想,所以推荐使用; 通过堆区动态开辟内存解决:C语言中,通常用malloc来在堆区动态开辟内存,利用堆区“现用现开辟,用完手动收回”...
  • C++中函数如何返回数组

    万次阅读 2016-01-24 12:29:33
    C++中如何使函数返回数组   在C++中,数组不是一种类型,因此不能被直接返回。一般有两种方法来返回一个数组。 1. 返回一个指向数组的指针  #include using namespace std; int* Array() {   int *a;  a=...
  • c++ 如何让函数返回数组

    千次阅读 2019-01-28 12:40:34
    函数体内部创建的变量都是局部变量,当函数运行结束的时候,都会抛弃,也就是说你只返回了一个temp指针,这个指针确实是你想要的,这没有问题,但是它指向的内容在函数结束也就是return的那一刻之后就已经物是人非了...
  • 可能很多初学者对C语言中(C++类似),数组作为参数传递,和一个函数如何返回一个数组这类问题很迷惑,因为这里面...函数怎样才能返回数组返回数组函数如何进行调用? 数组如何作为参数进行传递?我们知道数组的两
  • C函数返回字符数组

    万次阅读 多人点赞 2019-05-10 23:47:37
    原文 C函数返回字符数组,CSDN同步发布。...1、为什么作为局部变量的字符数组不能直接返回,而字符指针却可以? 2、当字符数组是局部变量的时候,函数如何返回它? 3、字符数组(char [])和字符指针(char...
  • 怎样让函数返回数组

    万次阅读 2016-10-15 10:23:59
    用动态内存new和形参的方法让C++中函数返回一个数组
  • 因为数组不能被拷贝, 所以函数不能返回数组. 不过, 函数可以返回数组的指针或引用. 声明一个返回数组指针的函数 Type (*function(parameter_list))[dimension] int (*func(int i))[10]; func(int i) 表示调用 func...
  • 关于C语言函数返回一个数组c语言中函数不能直接返回一个数组,但是可以用其他方式实现类似功能,不过需要注意:1、该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放。可以是全局变量,...
  • 如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,如下: int *myFunction(void) { . . } 另外,C 支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。 所以我们将数组a定义为...
  • 今天小编就为大家分享一篇python调用c++ ctype list传数组或者返回数组的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Java调用C语言动态库(JNA方式):回调函数、结构体数组传参、结构体数组返回-附件资源
  • C语言,函数返回数组

    千次阅读 2018-02-04 21:48:41
    可以的,但大多数方式都是说将数组的首地址作参数输入,或是指针函数返回一个数组的首地址。而这种方式并非真正意义上的“输入”或“输出”。 参数是一个新的量被附了参考量的值,无论函数内部如何改变这个参数,都...
  • c语言中函数能返回一个数组

    千次阅读 2016-03-12 20:51:21
    不能直接返回一个数组,但是可以用其他方式实现类似功能。 方法1:利用全局变量    分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但在实际教学过程中应用得并不是很多。由于全局变量的作用域...
  • 函数返回指针数组的方法 int (*func())[20]

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,206,353
精华内容 482,541
关键字:

函数能否返回数组