当前位置:网站首页>C专家编程 第10章 再论指针 10.6 使用指针从函数返回一个数组
C专家编程 第10章 再论指针 10.6 使用指针从函数返回一个数组
2022-08-10 16:03:00 【weixin_客子光阴】
使用指针从函数返回一个数组
严格地说,无法直接从函数返回一个数组。但是,可以让函数返回一个指向任何数据结构的指针,当然也可以返回一个指向数组的指针。记住,声明必须在使用之前。一个声明的例子是:
int (*paf())[20];
这里,paf是一个函数,它返回一个指向包含20个int元素的数组的指针。它的定义可能如下:
int (*paf())[20] {
int (*pear)[20]; /*声明一个指向包含20个int元素的数组的指针*/
pear = calloc(20, sizeof(int));
if (!pear) {
longjmp(error, 1);
}
return pear;
}
你用下面这样的方法来调用函数:
int (*result)[20]; /*声明一个指向包含20个int元素的数组的指针*/
...
result = paf(); /*调用数组*/
(*result)[3] = 12; /*访问结果数组*/
或者玩个花样,定义一个结构:
struct a_tag{
int array[20];
}x, y;
struct a_tag my_function() {
...return y;
}
用下面的方法来调用:
x = y;
x = my_function();
如果要访问数组中的元素,可以用下面的方法:
x.array[i] = 38;
千万要注意,不能从函数中返回一个指向函数的局部变量的指针。
为什么NULL指针会导致printf函数崩溃?
有一个经常被问到的问题是:“为什么向printf()函数传递一个NULL指针会导致程序崩溃?”
人们似乎觉得可以像下面这样编写代码:
char *p = NULL;
/* ... */
printf("%s", p);
问题在于C标准规定%s说明符的参数必须是一个指向字符数组的指针。由于NULL并不是这样的指针(它是一个指针,但它并不指向一个字符数组),所以这个调用将陷入“未定义行为”。
由于程序员在编码时出现了一些错误,问题是“你是希望尽早还是尽晚发现错误?”。
边栏推荐
猜你喜欢

怎么截取视频做gif动图?手把手教你视频在线转gif制作
![[FreeRTOS] 13 Dynamic Memory Management](/img/78/45af1c090cdfe687919432fb91fd28.png)
[FreeRTOS] 13 Dynamic Memory Management

一种新的测试方法:视觉感知测试

Ameya360成为稳先微电子中国区域授权代理!

不爱生活的段子手不是好设计师|ONES 人物

26、压缩及解压缩命令

String compression (3) short string compression

从抖音到火山引擎——看流媒体技术演进和机会

An ABAP tool that can print the browsing history of a user in the system for BSP applications

I met a 25k+ from Tencent, he let me see what kind of basic ceiling
随机推荐
MySQL command line export import database
Opencv 图像超像素分割(SLIC、SEEDS、LSC)
北海 Kraken:基于 Flutter 构建的高性能 Web 渲染引擎
Qt 绘图和绘图设备
MySQL-创建、修改和删除表
cmake记录
如何修改gif尺寸?1分钟教你快速修改gif尺寸
MS | 使用小技巧不完全总结
智为链接,慧享生活,荣耀智慧服务,只为 “懂” 你
LeetCode-101. Symmetric Tree
数据可视化:Metabase
Colocate Join :ClickHouse的一种高性能分布式join查询模型
WIZnet 物联网设计大赛 - WizFi360大赛延迟通知
如何修改gif图片尺寸?教你一键裁剪gif尺寸
FP6378AS5CTR SOT - 23-5 effective 1 mhz2a synchronous buck regulator
找到一个超级神奇,百试百灵的解决 ModuleNotFoundError: No module named xxx 的方法
An ABAP tool that can print the browsing history of a user in the system for BSP applications
【每日一题】【leetcode】25. 数组-旋转数组的最小数字
解决mpi4py导入报错ImportError: libmpi.so.40: cannot open shared object file: No such file or directory
26、压缩及解压缩命令