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

嵌入式杂牌军

共 3694字,需浏览 8分钟

 · 2021-03-26

扫描二维码

获取更多精彩

嵌入式杂牌军

                                                     

                                                  编辑|追梦星空

                                            公众号|嵌入式杂牌军


✎ 编 者 悟 语

    

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



文 章 导 读


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

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


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语言专辑


软实力专辑


软件推荐专辑



欢迎关注我的公众号,一起撸代码玩技
浏览 88
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报