精华内容
下载资源
问答
  • C语言函数返回数组

    2014-04-30 11:55:00
    #include "stdio.h"/*int* set(int a,int *c){int *b;b=malloc(sizeof(int)*3);c[0]=a;c[1]=1+a;c[2]=2+a;b[0]=13;b[1]=14;b[2]=15;return b;}*/char *set(void){char *buf;buf=malloc(sizeof(char)*3);...

    #include "stdio.h"
    /*
    int* set(int a,int *c)
    {
     int *b;
     b=malloc(sizeof(int)*3);
     c[0]=a;
     c[1]=1+a;
     c[2]=2+a;
     b[0]=13;
     b[1]=14;
     b[2]=15;
     return b;
    }
    */
    char *set(void)
    {
     char *buf;
     buf=malloc(sizeof(char)*3);//创建内存区
     buf[0]=0x30;
     buf[1]=0x31;
     buf[2]=0x32;
     return buf;
    }
    void main(void)
    {
     /*
     int b[3];
     int *c;
     int i;
    // c=malloc(sizeof(int)*3);
        c=set(3,&b);
     for(i=0;i<3;i++)
      printf("b=%d\n",b[i]);
     for(i=0;i<3;i++)
      printf("a=%d\n",c[i]);
     free(c);
     */
     char *c;
     int i;
     c=set();
     for(i=0;i<3;i++)
      printf("c=%c\n",c[i]);
     free(c);//释放内存区 
    }

    转载于:https://www.cnblogs.com/luxiaolai/p/3701023.html

    展开全文
  • 关于C语言函数返回数组的问题

    万次阅读 2016-11-29 23:03:52
    关于C语言函数返回一个数组 c语言中函数不能直接返回一个数组,但是可以用其他方式实现类似功能,不过需要注意: 1、该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放。 可以是全局变量,...

    关于C语言函数返回一个数组
    c语言中函数不能直接返回一个数组,但是可以用其他方式实现类似功能,不过需要注意:
    1、该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放。
    可以是全局变量,静态局部变量,动态分配内存,以及从函数参数传过来的数组地址。
    2、返回指针时,无法返回长度,所以需要其它方式传回数组长度,以下是几种常用的方法。
    1) 约定固定长度;
    2) 以函数参数返回数组长度;
    3)将长度保存在全局变量中;
    4)约定数组结束标记;
    5)在数组中存储数组长度,如存在第一个元素中。

    有些时候需要子函数将一个数组返回出来,通常是两种方法,一种是靠指针,另一种是结构体。

    一、先来看依靠指针怎么做

    #include <stdio.h>
    char *test(char *tmp)
    {
        return tmp;
    }
    void main(void)
    {
        printf("%s",test("第一个测试例子\n"));
    }

    二、使用结构体作为返回值来传递数组

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #ifdef _WIN32
    //#include <Windows.h>
    #include <vld.h>
    #endif
    
    //直接返回指针,但是无法返回长度
    char *test(char *tmp)
    {
        return tmp;
    }
    
    //返回数组首地址
    char *test2()
    {
        //char tmp[30]="第一个测试例子\n";//错误写法,写成这样编译时弹出警告,最后的结果也是乱码
        char *tmp="test2 demo";//写成这样可以用指针返回数组首地址
        return tmp;
    }
    //使用静态全局变量
    char *test3()
    {
        //静态全局变量,但不是线程安全的,在多线程环境中就危险了
        static char tmp[30]="third demo test003";
        return tmp;
    }
    
    //动态分配内存, 调用malloc在堆上分配内存,记得free
    int* getArrays(int n)
    {
        //malloc数组建立在heap堆上,调用完函数还在,返回了那个堆上数组的首地址
        int* array = (int *)malloc(sizeof(int)*n);
        int base=100;
        for(int i=0;i<n;i++)
        {
            array[i]=base+i;//赋值
    
        }
        return array;
    }
    void showArr(int* arr,int len)
    {
        for(int i=0;i<len;i++)
        {
            printf("%d ",arr[i]);
        }
        printf("\n");
    }
    //从函数参数传过来的数组地址
    int getCharsArray(char* output,int len)
    {
        strncpy(output,"123456789 from china!",len);
        return 0;
    }
    //动态分配内存
    char* getCharsArrayByPoint(int len)
    {
        //malloc数组建立在heap堆上,调用完函数还在,返回了那个堆上数组的首地址
        char* array = (char *)malloc(sizeof(char)*len+1);
        memset(array,0,sizeof(char)*len+1);
        strncpy(array,"getCharsArrayByPoint from china!",len);
        return array;
    }
    
    struct ArrayStruct
    {
        char buf[1024];
    };//定义结构体时不要忘了分号
    
    //使用结构体作为返回值来传递数组
    struct ArrayStruct byStruct(char *tmp)
    {
        struct ArrayStruct arr;
        strcpy(arr.buf,tmp);
        return arr;
    }
    //关于C语言函数返回数组的问题
    int main(int argc, char *argv[])
    {
        char* line=test("first test demo\n");
        printf("%s",line);
    
        char* line2=test2();
        printf("%s\n",line2);
    
        char* line3=test3();
        printf("%s\n",line3);
    
        char line4[1024]={0};
        getCharsArray(line4,sizeof(line4));
        printf("%s\n",line4);
    
        char *line5=getCharsArrayByPoint(150);
        printf("%s\n",line5);
        free(line5);
    
        struct ArrayStruct arrStruct;
        arrStruct=byStruct("byStruct");//用结构体作为返回值传递数组
        printf("%s\n",arrStruct.buf);
    
        #define arrLen 10
        int* arr=getArrays(arrLen);
        showArr(arr,arrLen);
        free(arr);//和malloc配对
        return 0;
    }

    两点注意:

    1、数组之间的赋值不要直接,即不要直接将数组A赋给数组B,而是要用strcpy(字符型数组)或者memcpy(非字符型数组)。

    2、用结构体定义变量和函数时不要忘了结构体名。




    展开全文
  • 关于C语言函数返回一个数组c语言中函数不能直接返回一个数组,但是可以用其他方式实现类似功能,不过需要注意:1、该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放。可以是全局变量,...

    (转自:https://blog.csdn.net/earbao/article/details/53401800

     

    关于C语言函数返回一个数组
    c语言中函数不能直接返回一个数组,但是可以用其他方式实现类似功能,不过需要注意:
    1、该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放。
    可以是全局变量,静态局部变量,动态分配内存,以及从函数参数传过来的数组地址。
    2、返回指针时,无法返回长度,所以需要其它方式传回数组长度,以下是几种常用的方法。
    1) 约定固定长度;
    2) 以函数参数返回数组长度;
    3)将长度保存在全局变量中;
    4)约定数组结束标记;
    5)在数组中存储数组长度,如存在第一个元素中。
     

    有些时候需要子函数将一个数组返回出来,通常是两种方法,一种是靠指针,另一种是结构体。

    一、先来看依靠指针怎么做

     

    [cpp] view plain copy

    1. #include <stdio.h>  
    2. char *test(char *tmp)  
    3. {  
    4.     return tmp;  
    5. }  
    6. void main(void)  
    7. {  
    8.     printf("%s",test("第一个测试例子\n"));  
    9. }  

    二、使用结构体作为返回值来传递数组

     

    [cpp] view plain copy

    1. #include <stdio.h>  
    2. #include <stdlib.h>  
    3. #include <string.h>  
    4. #ifdef _WIN32  
    5. //#include <Windows.h>  
    6. #include <vld.h>  
    7. #endif  
    8.   
    9. //直接返回指针,但是无法返回长度  
    10. char *test(char *tmp)  
    11. {  
    12.     return tmp;  
    13. }  
    14.   
    15. //返回数组首地址  
    16. char *test2()  
    17. {  
    18.     //char tmp[30]="第一个测试例子\n";//错误写法,写成这样编译时弹出警告,最后的结果也是乱码  
    19.     char *tmp="test2 demo";//写成这样可以用指针返回数组首地址  
    20.     return tmp;  
    21. }  
    22. //使用静态全局变量  
    23. char *test3()  
    24. {  
    25.     //静态全局变量,但不是线程安全的,在多线程环境中就危险了  
    26.     static char tmp[30]="third demo test003";  
    27.     return tmp;  
    28. }  
    29.   
    30. //动态分配内存, 调用malloc在堆上分配内存,记得free  
    31. int* getArrays(int n)  
    32. {  
    33.     //malloc数组建立在heap堆上,调用完函数还在,返回了那个堆上数组的首地址  
    34.     int* array = (int *)malloc(sizeof(int)*n);  
    35.     int base=100;  
    36.     for(int i=0;i<n;i++)  
    37.     {  
    38.         array[i]=base+i;//赋值  
    39.   
    40.     }  
    41.     return array;  
    42. }  
    43. void showArr(int* arr,int len)  
    44. {  
    45.     for(int i=0;i<len;i++)  
    46.     {  
    47.         printf("%d ",arr[i]);  
    48.     }  
    49.     printf("\n");  
    50. }  
    51. //从函数参数传过来的数组地址  
    52. int getCharsArray(char* output,int len)  
    53. {  
    54.     strncpy(output,"123456789 from china!",len);  
    55.     return 0;  
    56. }  
    57. //动态分配内存  
    58. char* getCharsArrayByPoint(int len)  
    59. {  
    60.     //malloc数组建立在heap堆上,调用完函数还在,返回了那个堆上数组的首地址  
    61.     char* array = (char *)malloc(sizeof(char)*len+1);  
    62.     memset(array,0,sizeof(char)*len+1);  
    63.     strncpy(array,"getCharsArrayByPoint from china!",len);  
    64.     return array;  
    65. }  
    66.   
    67. struct ArrayStruct  
    68. {  
    69.     char buf[1024];  
    70. };//定义结构体时不要忘了分号  
    71.   
    72. //使用结构体作为返回值来传递数组  
    73. struct ArrayStruct byStruct(char *tmp)  
    74. {  
    75.     struct ArrayStruct arr;  
    76.     strcpy(arr.buf,tmp);  
    77.     return arr;  
    78. }  
    79. //关于C语言函数返回数组的问题  
    80. int main(int argc, char *argv[])  
    81. {  
    82.     char* line=test("first test demo\n");  
    83.     printf("%s",line);  
    84.   
    85.     char* line2=test2();  
    86.     printf("%s\n",line2);  
    87.   
    88.     char* line3=test3();  
    89.     printf("%s\n",line3);  
    90.   
    91.     char line4[1024]={0};  
    92.     getCharsArray(line4,sizeof(line4));  
    93.     printf("%s\n",line4);  
    94.   
    95.     char *line5=getCharsArrayByPoint(150);  
    96.     printf("%s\n",line5);  
    97.     free(line5);  
    98.   
    99.     struct ArrayStruct arrStruct;  
    100.     arrStruct=byStruct("byStruct");//用结构体作为返回值传递数组  
    101.     printf("%s\n",arrStruct.buf);  
    102.   
    103.     #define arrLen 10  
    104.     int* arr=getArrays(arrLen);  
    105.     showArr(arr,arrLen);  
    106.     free(arr);//和malloc配对  
    107.     return 0;  
    108. }  

    两点注意:

    1、数组之间的赋值不要直接,即不要直接将数组A赋给数组B,而是要用strcpy(字符型数组)或者memcpy(非字符型数组)。

    2、用结构体定义变量和函数时不要忘了结构体名。

     

    展开全文
  • 文章logo函数的值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。如调用正弦函数取得正弦值,调用例8.1的max函数取得的最大数等。对函数的值(或称函数返回值)有以下一些说明:1) 函数的值...
    9a7d198b5d9ed8f609411911c1b74f4b.png

    文章logo

    函数的值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。如调用正弦函数取得正弦值,调用例8.1的max函数取得的最大数等。对函数的值(或称函数返回值)有以下一些说明:

    1) 函数的值只能通过return语句返回主调函数。

    return 语句的一般形式为:

    return 表达式;

    或者为:

    return (表达式);

    该语句的功能是计算表达式的值,并返回给主调函数。在函数中允许有多个return语句,但每次调用只能有一个return 语句被执行,因此只能返回一个函数值。

    2) 函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换。

    3) 如函数值为整型,在函数定义时可以省去类型说明。

    4) 不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。如例函数s并不向主函数返函数值,因此可定义为:

    void s(int n)

    { ……

    }

    一旦函数被定义为空类型后,就不能在主调函数中使用被调函数的函数值了。例如,在定义s为空类型后,在主函数中写下述语句

    sum=s(n);

    就是错误的。

    为了使程序有良好的可读性并减少出错, 凡不要求返回值的函数都应定义为空类型。

    展开全文
  • C语言 函数返回数组和指针区别

    千次阅读 2017-09-14 10:42:32
    那么为啥函数str3()和str4()可以正常返回数组结果,str5()不可以呢,这是因为,他们三个函数中的数组都存放在内存中的栈中,只是因为数组设置的比较 大为1024,当存放的是小数组“Hello!”时候可以返回是因为内存...
  • C语言函数返回一个数组,之前有人写过有两种方法,指针&结构化,但试了试在DEV上都有错误,修改了一下,可以运行了: 1. 结构化 typedef struct  {   int a[10];  }RET; RET retArray()  {   RET x...
  • 程序内容: 初始化一个double类型的二维数组,使用编程练习2中的一个拷贝函数把该数组中的数据拷贝至另一个二维数组。 程序为C Primer Plus第十章第七题的答案示例附:程序代码为本人亲自编写,并非书内标准答案,仅...
  • #include <stdio.h> #include <string.h> /*返回数组函数*/ int *ArrayReturn(void); int main() { int array[20] = {0}; int i; [color=#FF0000] array ...返回数组函数一直很纠结啊
  • 有些时候需要子函数将一个数组返回出来,通常是两种方法,一种是靠指针,另一种是结构体。 一、先来看依靠指针怎么做 例程1: 1 #include "stdio.h" 2 3 char *test(char *tmp) 4 { 5 return tmp; ...
  • c语言函数数组返回和指针返回

    千次阅读 2019-04-13 10:09:52
    1先看看第一种,返回数组; #include "stdio.h" char * get_c() { char ch[]="hello"; //这是一个栈空间 char *p; //这也是栈空间 p=ch; printf("%x\n",&ch); printf("%x\n",...
  • C语言自定义函数返回数组的方法(图文详解)最近看到一些同学问题,有提到说:如何在一个函数中返回数组呢?能否直接在自定义 函数中,写成char *类型返回值,直接返回呢?,代码如下:直接返回str数组名(注意不需要加...
  • C语言函数返回数组

    千次阅读 2018-02-04 21:48:41
    可以的,但大多数方式都是说将数组的首地址作参数输入,或是指针函数返回一个数组的首地址。而这种方式并非真正意义上的“输入”或“输出”。 参数是一个新的量被附了参考量的值,无论函数内部如何改变这个参数,都...
  • 今天遇到一个自定义函数返回数组的情况,下面用一个很简单的事例演示: #include<stdio.h> #include<string.h> char* a(char* x) { char y[strlen(x)]; strncpy(y,x,strlen(x)-1); //将x数组的前...
  • C语言函数返回数组的方法

    千次阅读 2020-06-23 15:50:51
    C 语言不允许返回一个完整的数组作为函数的参数。但是,可以通过指定不带索引的数组名来返回一个指向数组的指针。 另外,C 不支持在函数返回局部变量的地址,除非定义局部变量为 static 变量。 示例: u8 *...
  • 首先说下数组与指针的区别 char a[] = “abcdefg”; char *p = “abcdefg” ; 1 a就是数组的首地址 2 数组的内容可以修改,指针的内容不可以修改 在ANSI C中,初始化指针是所创建的字符串时常量,被定义为...
  • c语言c++ 从函数返回数组 c++不允许返回一个完整的数组,因此通过指定不带索引的数组名来返回一个指向数组的指针,举个例子: int * myFunction() { . . } 另外,C++ 不支持在函数外返回局部变量的地址,除非定义...
  • 如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,如下: int *myFunction(void) { . . } 另外,C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。 所以我们将数组a定义为...
  • C语言函数不可以返回数组却可以返回结构体这是为什么呢 最近有读者问我为什么C语言函数可以返回结构体却不可以返回数组有这样的问题并不奇怪因为C语言数组和结构体本质上都是管理一块内存那为何编译器要区别对待二者...
  • C语言函数返回整形数组

    千次阅读 2015-05-12 22:34:45
    #include"stdio.h" #include"string.h" #include"stdlib.h" #include"time.h" int * test( ...简单点说,就是要用指针,如果是用数组返回的指针,指向的是已销毁的局部变量,这会出问题的。
  • 先看如下程序: #include<stdio.h> #define M 2 #define N 3 int main() ...//函数声明 float score[M][N]={{89,99,80},{100,88,90}}, *aver_stu; int i; //每个学生平均成绩 aver_stu=a...
  • ,由于[]的优先级高于*,故 pf先与[]结合,说明它是一个数组,再与*结合说明数组中的元素的类型是指针,再看后面的参数列表,说明每一个指针都指向一个函数的入口地址,并且指向的函数返回类型为int。int (*pf[])...
  • C语言自定义函数如何返回数组

    万次阅读 多人点赞 2017-11-03 21:27:27
    C语言自定义函数如何返回数组  C语言研究中心  CTO 9个月前 (01-28) 4759次浏览 5个评论 最近看到一些同学问题,有提到说:如何在一个函数返回数组呢? 能否直接在自定义 函数中,写成char *类型...
  • C语言函数指针数组

    千次阅读 2016-12-29 23:22:30
    函数指针数组概念: ... 返回类型说明符 (*函数指针数组名[])(参数列表) = {函数指针/函数名,…}; 如下: int (*fun_array[])(int,int) = {add,del,mul,div};函数指针数组的使用如下: 函数指针数组名下标
  • C语言 函数返回一位数组,二维数组

    万次阅读 多人点赞 2019-04-19 18:55:47
    万能的结构体:构造数组的结构体,将函数类型定义为此类型 但是考试的时候应该不太方便写结构体,写不下也会很麻烦,故介绍方法二 方法二: 指针传递: 1、返回一维数组 例子:将数组每一位加一: #include&...
  • 关注、星标公众号,直达精彩内容来源:今日头条作者:IT刘小虎最近有读者问我,为什么C语言函数可以返回结构体,却不可以返回数组。有这样的问题并不奇怪,因为C语言数组和结构体本质上都是管理一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,885
精华内容 754
关键字:

c语言函数返回数组

c语言 订阅