精华内容
下载资源
问答
  • C语言函数传数组地址参数

    千次阅读 2018-12-20 17:08:56
    main()函数里写成ReadReg(Addr + i, buf[i]); 出错。 buf[i]前需加取地址符& #include "stdio.h" int i; int Addr;, int buf[16] = {0}; int ReadReg(int a, int * b) { ... ... } void...

     main()函数里写成ReadReg(Addr + i, buf[i]); 出错。

    buf[i]前需加取地址符&

    #include "stdio.h"
    
    int i;
    
    int Addr;,
    
    int buf[16] = {0};
    
    int ReadReg(int a, int * b)
    {
        ...
        ...
    }
    
    void main()
    
    {
       Addr = 0x00;
    
       for (i = 0; i < 16; i++) 
        {
            ReadReg(Addr + i, &buf[i]);
        }
    }

     

    ReadReg()函数的第一个参数Addr的值,第二个参数传数组buf的地址。

     

    展开全文
  • 关于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、用结构体定义变量和函数时不要忘了结构体名。

     

    展开全文
  • c语言函数数组返回和指针返回

    千次阅读 2019-04-13 10:09:52
    函数内的数组和指针都是属于函数栈空间。如果把数组或指针返回给外部指针,会发生什么? 1先看看第一种,返回数组; #include "stdio.h" char * get_c() { char ch[]="hello"; //这是一个栈空间 char *p; /...

        函数内的数组和指针都是属于函数栈空间。如果把数组或指针返回给外部指针,会发生什么?

    1先看看第一种,返回数组;

    #include "stdio.h"
    
    
    char * get_c()
    {
    	char ch[]="hello";  //这是一个栈空间
    	char *p;			//这也是栈空间
    	p=ch;
    	printf("%x\n",&ch);
    	printf("%x\n",p);
    	printf("%s\n",p);
    	return ch;
    }
    
    int main(int argc, char const *argv[])
    {
    	char *ch;
    
    	ch=get_c();
    
    	printf("%x\n",ch);
    	printf("%s\n",ch);
    	while(1);
    	return 0;
    }

    运行效果:会直接报警告,当然可以无视啦,不过数组的地址居然没有返回出来,地址是0,当然里面也不会有数据啦。

    2看看返回指针的情况:

    #include "stdio.h"
    
    
    char * get_c()
    {
    	char ch[]="hello";  //这是一个栈空间
    	char *p;			//这也是栈空间
    	p=ch;
    	printf("%x\n",&ch);
    	printf("%x\n",p);
    	printf("%s\n",p);
    	return p;
    }
    
    int main(int argc, char const *argv[])
    {
    	char *ch;
    
    	ch=get_c();
    
    	printf("%x\n",ch);
    	printf("%s\n",ch);
    	while(1);
    	return 0;
    }

    运行效果:编译没有错误,地址成功返回了,但是里面的数据居然是乱码,我们可以猜测,由于栈被回收了,这个内存就不属于

    这个数组了,系统或者任务会主动的修改里面的数据,导致就算这个指针指向这个内存,值可能已经不是自己想要的了,也就是

    一个野指针吧。

     

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

    千次阅读 2017-09-14 10:42:32
     如上面程序str6()中把数组声明为static 存放在静态变量区,但是这样存在内存泄漏,也可以通过malloc(C语言)或者new(C++)将数组声明在堆(heap)中,  然后在函数使用完后free()或者delete内存;不过有可能...
  • PAGE / NUMPAGES 预备实验 C语言函数数组指针结构体知识 一实验目的 1复习C语言函数数组指针结构体与共用体等的概念 2熟悉利用C语言进行程序设计的一般方法 二实验预习 说明以下C语言中的概念 函数 数组 3指针 4...
  • ![图片说明](https://img-ask.csdn.net/upload/201805/08/1525778822_142150.png) !...!...!...!...想请教各位大佬这几个题中指针所代表的含义 如果能解释一下题目的解题过程就更好了 最近学指针 真的是被它搞得有点晕
  • 定义的二维数组为全局变量,在主函数中有多个子函数要用到它。请问下大家,子函数中计算的此二维数组的值间能传递么?还是也需要调用呢?~~
  • 一、函数指针数组1.1函数指针数组的声明 函数指针数组的声明如下,所谓函数指针数组就是在之前的函数指针的基础上增加了[],由于[]的优先级高于*,故 pf先与[]结合,说明它是一个数组,再与*结合说明数组中的元素的...
  • C语言函数指针数组

    千次阅读 2016-12-29 23:22:30
    数组元素是指针函数的数组叫做指针函数数组,通常我们也叫做转移表 定义个初始化: 返回类型说明符 (*函数指针数组名[])(参数列表) = {函数指针/函数名,…}; 如下: int (*fun_array[])(int,int) = {add,del...
  • C语言 函数调用传数组首地址

    千次阅读 2012-06-21 16:07:41
    #include void dia(int a[], int n)/*数组传的其实是地址*/ { int i; for(i=0;i;i++) { if(a[i]%2==0) a[i]*=2; else a[i]*=3; } } main() { int x[8]={11,12,13,14,15,16,17,18},i;
  • 四、函数指针数组 五、指向函数指针数组的指针 目录 1.指针数组 2.数组指针 3.函数指针 4.函数指针数组 5.函数指针数组的指针 一、指针数组 1.是一个存放指针的数组 2.举一个栗子 int *...
  • C语言 函数 数组

    千次阅读 2018-01-25 22:01:26
    (1)static在修饰main和普通函数中的变量时,都是修饰局部变量,为什么普通函数中的变量可以保持,main中变量不保持? static修饰局部变量时,变量存放在栈区,生命周期随着语句块执行结束而结束。但使用static...
  • C语言循环、数组函数及指针练习题精选及答案,习题经典,答案详细!
  • C语言函数返回数组

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

    2011-05-16 12:03:27
    基本解释  1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。 ... 3、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
  • C语言二维数组作为函数参数传递

    万次阅读 多人点赞 2018-06-07 21:43:37
    二维数组作为函数的参数,实参可以直接使用二维数组名,在被调用函数中可以定义形参所有维数的大小,也可以省略以为大小的说明。例如: void find(char a[3][10]); void find (char a[ ][10]); 也可以使用数组...
  • C语言0长度数组(可变数组/柔性数组)详解

    万次阅读 多人点赞 2017-03-20 19:37:26
    C语言0长度数组(可变数组/柔性数组)详解 CSDN GitHub C语言0长度数组(可变数组/柔性数组)详解 AderXCoding/language/c/zero_length_array 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议...
  • c语言函数传递数组

    千次阅读 2020-04-11 19:23:43
    可以定义一个能接受数组作为函数参数的函数,然后调用这个函数时,可以将一个实际的数组传递给它。 数组作为函数参数时,其定义方式有下列三种: /*函数名param后跟一个空的[],说明param可以接受一个数组*/ void ...
  • C语言程序设计教案 章节名称 数组作为函数参数传递 授课类型 理论 实验 ?理实一体 实训 实习 班级 地点 周次 星期 节次 授课进度 ?符合 超前 滞后 ?符合 超前 滞后 ?符合 超前 滞后 教学目标 知识目标 1.掌握数组...
  • 动态申请内存和释放内存 多维数组 动态定义数组
  • 主要介绍了C语言实现在数组A上有序合并数组B的方法,包含了数组操作的完整实现过程以及相应的代码分析与改进,具有不错的借鉴价值,需要的朋友可以参考下
  • 以前一直不知道为什么数组作为形参调用函数时需要连同数组长度一起进来,难道不能在被调用函数当中利用sizeof()自己算吗?答案是不可以! 下面来做个实验: /* project:test editor:帮我起个昵称吧 date:2019.8....
  • c语言数据结构数组修改数组An array is a data structure for storing elements of one data type sequentially. The elements of an array are allocated at the adjacent memory location. Each element of an ...
  • C语言中利用数组存放函数指针,增加函数使用的灵活性。使用时只需提供数组索引,即可调用不同函数。 预备知识: 1、指向函数的指针 一个函数在编译时被分配一个入口地址,这个地址就被称为函数的指针。 例如:
  • C语言 | 字符数组

    千次阅读 2021-04-12 09:45:02
    C语言字符数组的定义 字符数组是用来存放字符数据的数组,字符数组中的一个元素存放一个字符,定义字符数组的方法和定义数值型数组的方法类似。 //例子: char character[10]; C语言字符数组的初始化 C语言对字符...
  • C语言 16进制数组 转 ASCII字符串函数 RET_SUCCESS、RET_FAILURE需自行定义 array_b的第2n+1个元素必须是’\0’,代表字符串结束 /** **************************************************************************...
  • 数 组 数组是具有一定顺序关系的若干相同类型变量的集合体组成数组的变量称为该数组的元素 数组属于构造类型数组的几点说明 数 组 数组的定义形式同C语言中的数组 数组名是常量表示数组元素的首地址 数组下标从零...
  • C语言实现动态数组大小

    千次阅读 2015-11-15 13:33:44
    C语言动态数组大小 C语言中的数组大小是固定的,定义的时候必须要给一个常量值,不能是变量。这带来了很大的不便,如果数组过小,不能容下所有数组,如果过大,浪费资源。 //C语言动态分配数组大小 #include #...
  • 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 思路描述:一个数字的下方和右方是比它本身大的区域,而左方和上方时比它本身小的区域。选取右上角的数字进行比较,当该数大于指定的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 262,368
精华内容 104,947
关键字:

c语言函数传数组

c语言 订阅