C数组指针函数指针做函数参数和返回值
数组和函数不能用做参数和返回值,但数组指针和函数指针可以。
1 数组指针做函数参数
数组指针做函数参数,数组名用做实参时,其形参为指向数组首元素的指针(指针目标类型为数组元素)。#include #include #define ROWS 3 #define COLS 2 void fun1(int (*)[COLS], int); int main() { int array_2D[ROWS][COLS] = { {1, 2}, {3, 4}, {5, 6} }; int rows = ROWS; /* works here because array_2d is still in scope and still an array */ printf("MAIN: %zu ",sizeof(array_2D)/sizeof(array_2D[0])); fun1(array_2D, rows); getchar(); return EXIT_SUCCESS; } void fun1(int (*a)[COLS], int rows) { int i, j; int n, m; n = rows; /* Works, because that information is passed (as "COLS"). It is also redundant because that value is known at compile time (in "COLS"). */ m = (int) (sizeof(a[0])/sizeof(a[0][0])); /* Does not work here because the "decay" in "pointer decay" is meant literally--information is lost. */ printf("FUN1: %zu ",sizeof(a)/sizeof(a[0])); for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { printf("array[%d][%d]=%d ", i, j, a[i][j]); } } }
2 数组指针做函数返回值
数组指针做函数返回值时,数组指针是指指针目标类型为数组元素的指针。#include #include char(*weekday())[5] { char(*wee)[5] = (char(*)[5])malloc(sizeof(char)*5*7); char* str[] = {"Mon.","Tue","Wed.","Thu.","Fri.","Sat.","Sun."}; for(int i=0;i<7;i++) for(int j=0;j<5;j++) wee[i][j] = str[i][j]; return wee; } int main() { char(*week)[5] = weekday(); for(int i=0;i<7;i++) printf("%s ",week[i]); free(week); setbuf(stdin,NULL); getchar(); }
3 函数指针做函数参数
函数指针做函数参数,可以封装函数体中因因应不同需求而需"变化"的代码,避免"硬"编程,让代码更加通用和泛化。#include void sort(int arr[],int size,bool(*comp)(int,int)) { for(int i=0;i enum Op { ADD = "+", SUB = "-", }; int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } /* getmath: return the appropriate math function */ int (*getmath(enum Op op))(int,int) { switch (op) { case ADD: return &add; case SUB: return default: return NULL; } } int main(void) { int a, b, c; int (*fp)(int,int); fp = getmath(ADD); a = 1, b = 2; c = (*fp)(a, b); printf("%d + %d = %d ", a, b, c); getchar(); return 0; }
-End-
iPhoneSE3曝光在当下的手机市场,虽然国产手机配置性能大幅提升,但从整个手机市场的表现来看,苹果iPhone仍然是销量最好的手机厂商,仅凭iPhone13系列,苹果就再次完美回归。不得不承认,iP
威马智能新能源汽车交付量的不断增加作为汽车制造新力量的一员,威马汽车不仅可以准确定位汽车企业创新转型的发展趋势,还可以深入探索用户的真实需求。通过推出一系列智能与实用相结合的智能新能源汽车,赢得了众多消费者的认可。
母婴推广如何做?一多渠道口碑营销,打造声量提名气消费者在购买母婴产品时,通常会先在网上查询该产品或品牌的口碑,包括知名度成分使用感安全性效果等方面,基本通过百度系搜索引擎小红书知乎等平台获取相关信
买小米平板5还是ipad?看完你就知道了目前小米平板5和ipad2020是市场上比较热门的两款平板,不少用户都不知道应该怎么选,今天我们就从使用场景和配置两方面对比,看看各位比较适用哪一款。但是我个人是不推荐大家在平板上
新iPhone来了,3月8日见?春节小长假已经结束,相信许多小伙伴已经陆续回归到了工作岗位上。伴随着节后复工潮,我们也将迎来今年的苹果春季新品发布会。苹果近几年通常会在三月推出春季新品。近日,消息一向靠谱的彭博社
雷军快看,小米Civi已霸榜16天在智能手机领域可能除了苹果的iPhone能做到任何人群消费者都喜欢之外,其它的任何一款机型都不可能做到这一点。因此我们看到安卓阵营各品牌旗下的产品线都有好多个,每个产品线的机型定位
5分钟带你了解5G什么是5G?G就是Generation,指代的意思,5G就是第五代移动通信技术。用户体验5G速率是4G的10倍以上。下载一部1GB的电影只需10秒。但是5G不仅仅是速度更快这一个特
1。PyQt5GUI软件开发框架4。使用Qt资源文件4。使用Qt资源文件使用Qt进行软件开发,不可避免要使用资源文件。本节我们做一个简单示例,通过使用Qt资源文件为应用程序及关闭按钮设置图标。4。1创建资源文件根据前面我们所讲述的内
印象2021互联网行业十大金句盘点作者张淑英编辑StevenLee转眼间,2021这个数字正式成为历史。在适应了两年的疫情常态化后,各行各业的业绩终于有序反弹。以电影行业为例,国家电影局发布的数据显示,2021年中
在校大学生一枚,如何搭建一个自己的网站?首先最重要的是准备合理的预算,不要事事亲为,不要去享受那个过程,过程很痛苦。如果是自己从头搭建一个网站,要处理的事务有1购买域名费用1580元年到阿里云腾讯云去申请域名2域名的实名
微尘无处逃,扫地机器人让地板告别灰尘慵懒的人不愿意打扰卫生,尤其是想到每天清扫地面卫生简直是一种煎熬。不仅耗费了我们下班之后的休息时间,而且那些夹缝的位置清扫起来真的是腰酸背痛。这里推荐的智能扫地机器人,干起活来是勤