首页 文章详情

用数组指针从函数「返回」数组

嵌入式杂牌军 | 475 2021-03-26 18:27 0 0 0
UniSMS (合一短信)

扫描二维码

获取更多精彩

嵌入式杂牌军

                                                     

                                                  编辑|追梦星空

                                            公众号|嵌入式杂牌军


✎ 编 者 悟 语

    

      某方面意识的贯通是需要时间从不同的维度去提供支持的,小处着眼不要急,但在大处要有急迫感。



文 章 导 读


    今天和小伙伴们研究一下函数「返回」数组的问题,通过结构可以「返回」数组,通过数组指针也可以「返回」数组!返回之所加上括号是因为实际上函数并不能返回数组,但可以通过结构或指针间接的返回数组。

    阅读过程中有什么问题可以后台交流哈,


1 关于函数「返回」数组的说明



    1)C语言能返回数组吗

    C语言的函数是不能直接返回数组的,不过可以通过结构或数组指针进行间接的返回。

 

    2)下面方法返回数组存在的问题


    如果用下面的代码方式返回数组指针需要注意下面两个问题。


    ① 数组越界不会报错。


    ②数组指针的数组数量与函数声明中的数组个数不对应时并不报错。


2 实例代码



    1)实例代码

    

    说明都在代码注释中了,


#include <stdio.h>
#include <stdlib.h>
#include <errno.h>


int (*PtrFun())[100];   // 函数声明 


/* 实际上并不能从函数返回数组,但可以返回一个指向数组的指针 */ 
int main(int argc, char *argv[])                       
{
      int (*ptr)[100];  // 使用时指针的数量与函数不同时并不报错,100改成10 DevC++也是能正常运行的 
 
      ptr = PtrFun();
 
      if(ptr == NULL) 
      {
            fprintf(stderr, "Value of errno: %d\n", errno);                        // 打印错误码  
      }
 
      (*ptr)[2] = 123;
 
      printf("\n(*ptr)[2] = %d\n",(*ptr)[2]);
      printf("\n(*ptr)[100] = %d //数组越界了,这可不是我想要的结果\n",(*ptr)[100]) ;// 此时越界是不报错的,但这并不是我们想要的,使用时要注意 
 
      return 0;
}


/* 此种方式的隐患是数组越界不报错,但得到的数据不是我们想要的 */ 
int(*PtrFun())[100]        // 定义函数PtrFun,它的返回值是包含100个int类型数据的数组的指针 
{
      int (*ptrval)[100];  // 定义一个名为ptrval的数组指针(指向数组的指针) ,它指向包含100个int类型数据的数组 
 
      ptrval = malloc(sizeof(int)*100);  // 给指针分配空间,这是数组指针不是数组,不分配空间DevC++编译能通过,但运行程序会死掉 
 
      if(ptrval == NULL) 
      {
            return NULL;
      }
 
      return ptrval;
}

    2)运行结果




    今天就到这吧,希望对小伙伴有所帮助哈,喜欢的话欢迎转发、点赞、分享、在看、转载哈,


相关推荐


指针数组为什么不能这样初始化


数组与指针不能混用的情况


总线错误与段错误


程序断点与数据断点


专辑分享


Linux专辑


C语言专辑


软实力专辑


软件推荐专辑



欢迎关注我的公众号,一起撸代码玩技
good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter