用数组指针从函数「返回」数组
扫描二维码
获取更多精彩
嵌入式杂牌军
编辑|追梦星空
公众号|嵌入式杂牌军
某方面意识的贯通是需要时间从不同的维度去提供支持的,小处着眼不要急,但在大处要有急迫感。
文 章 导 读
今天和小伙伴们研究一下函数「返回」数组的问题,通过结构可以「返回」数组,通过数组指针也可以「返回」数组!返回之所加上括号是因为实际上函数并不能返回数组,但可以通过结构或指针间接的返回数组。
阅读过程中有什么问题可以后台交流哈,!
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)运行结果
今天就到这吧,希望对小伙伴有所帮助哈,喜欢的话欢迎转发、点赞、分享、在看、转载哈,。
评论