0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

面试常考+1:函数指针与指针函数、数组指针与指针数组

朱老师物联网大讲堂 2024-08-10 08:11 次阅读

嵌入式开发领域,函数指针、指针函数、数组指针和指针数组是一些非常重要但又容易混淆的概念。理解它们的特性和应用场景,对于提升嵌入式程序的效率和质量至关重要。

一、指针函数与函数指针

指针函数:

定义:指针函数是指返回值为指针的函数。

语法:返回值类型 *函数名(参数列表)。

示例代码:

#include #include
int *getNumber(int a, int b) { int *result = (int *)malloc(sizeof(int)); *result = a + b; return result;}
int main() { int *sum = getNumber(3, 4); printf("Sum: %d\n", *sum); free(sum); return 0;}

应用场景:

通常用于动态内存分配的场景。比如在嵌入式系统中,需要根据不同的条件动态分配内存来存储数据时,可以使用指针函数。它可以根据输入的参数,在堆上分配合适大小的内存空间,并返回指向该空间的指针。

函数指针:

定义:函数指针是指向函数的指针变量。

语法:返回值类型 (*指针变量名)(参数列表)。

示例代码:

#include
int add(int a, int b) { return a + b;}
int subtract(int a, int b){ return a - b;}
int main() { int (*funcPtr)(int, int); funcPtr = add; int result1 = funcPtr(5, 3); printf("Addition result: %d\n", result1);
funcPtr = subtract; int result2 = funcPtr(5, 3); printf("Subtraction result: %d\n", result2); return 0;}

应用场景:

事件驱动系统:在嵌入式系统中,可能会有多个不同的事件源(如按键、传感器等),每个事件都对应一个处理函数。可以使用函数指针来根据不同的事件调用相应的处理函数,提高系统的灵活性和可扩展性。

回调函数:

当一个函数需要在特定的操作完成后执行另一个函数时,可以将另一个函数的指针作为参数传递给它。例如,在嵌入式网络通信中,当接收到数据后,调用一个预先定义的处理数据的回调函数。

二、指针数组与数组指针

指针数组

定义:指针数组是由指针组成的数组。

语法:数据类型 *数组名[数组大小]。

示例代码:

#include
intmain(){ char *strings[] = {"Hello", "World", "Embedded"}; for (int i = 0; i < 3; i++)    { printf("%s\n", strings[i]); } return 0;}

应用场景:

管理多个字符串:在嵌入式系统中,如果需要处理多个字符串,可以使用指针数组。每个指针指向一个字符串的首地址,这样可以方便地对多个字符串进行操作和管理。

动态配置不同数据类型的指针:在一些需要根据不同情况动态配置不同数据类型指针的场景下,指针数组可以发挥作用。比如根据不同的传感器类型,配置不同的指针来获取相应的数据。

数组指针:

定义:数组指针是指向数组的指针。

语法:数据类型 (*指针变量名)[数组大小]。

示例代码:

#include
int main() { int arr[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; int (*arrayPtr)[3] = arr; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%d ", (*arrayPtr)[j]); } arrayPtr++; printf("\n"); } return 0;}

应用场景:

多维数组的参数传递:在嵌入式程序中,当需要将多维数组作为函数参数传递时,通常使用数组指针。这样可以避免数组在传递过程中的降维问题,确保函数能够正确访问多维数组的元素。

指向动态分配的二维数组:在动态内存分配的二维数组中,数组指针可以方便地管理和访问二维数组的元素。例如,在嵌入式图形处理中,动态分配一个二维像素数组,使用数组指针来操作该数组。

总之,在嵌入式开发中,正确理解和运用函数指针、指针函数、数组指针和指针数组,可以使程序更加灵活、高效和易于维护。通过掌握这些概念,开发者能够更好地应对各种复杂的嵌入式系统开发需求。

希望这篇文章能够帮助大家理清这些容易混淆的概念及其在嵌入式中的应用场景,让我们在嵌入式开发的道路上更进一步。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数组
    +关注

    关注

    1

    文章

    411

    浏览量

    25817
  • 函数指针
    +关注

    关注

    2

    文章

    55

    浏览量

    3760
  • 指针函数
    +关注

    关注

    0

    文章

    10

    浏览量

    2728
收藏 人收藏

    评论

    相关推荐

    函数指针指针函数的概念

    不少朋友会混淆“函数指针”和“指针函数”这两个概念,本文详细介绍一下。
    发表于 03-09 10:49 1057次阅读

    C语言中指针数组数组指针的区别

    指针数组之间存在着紧密的关系。在本文中,我们将探讨指针数组的关系、指针算术和数组遍历、多维
    发表于 08-17 15:29 363次阅读

    C语言——指针数组函数

    C语言——指针数组函数基本解释   1指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);
    发表于 04-20 15:25

    函数指针指针函数定义

    函数指针指针函数,C语言学习中最容易混淆的一些概念,好好学习吧
    发表于 01-11 16:44 0次下载

    数组指针的详细讲解

    数组指针的详细讲解
    发表于 10-16 08:44 0次下载

    c语言函数指针定义,指针函数函数指针的区别

     往往,我们一提到指针函数函数指针的时候,就有很多人弄不懂。下面就由小编详细为大家介绍C语言中函数指针
    发表于 11-16 15:18 3545次阅读

    指针数组数组指针的区别

    这里我们区分两个重要的概念:指针数组数组指针
    的头像 发表于 06-29 15:30 1.9w次阅读
    <b class='flag-5'>指针</b><b class='flag-5'>数组</b>和<b class='flag-5'>数组</b><b class='flag-5'>指针</b>的区别

    理解函数指针函数指针数组函数指针数组指针

    理解函数指针函数指针数组函数指针
    的头像 发表于 06-29 15:38 1.5w次阅读
    理解<b class='flag-5'>函数</b><b class='flag-5'>指针</b>、<b class='flag-5'>函数</b><b class='flag-5'>指针</b><b class='flag-5'>数组</b>、<b class='flag-5'>函数</b><b class='flag-5'>指针</b><b class='flag-5'>数组</b>的<b class='flag-5'>指针</b>

    单片机学习笔记————指针的第三大好处,指针作为数组函数中的输出接口

    单片机学习笔记————指针的第三大好处,指针作为数组函数中的输出接口
    发表于 11-26 10:51 1次下载
    单片机学习笔记————<b class='flag-5'>指针</b>的第三大好处,<b class='flag-5'>指针</b>作为<b class='flag-5'>数组</b>在<b class='flag-5'>函数</b>中的输出接口

    单片机学习笔记————指针的第二大好处,指针作为数组函数中的输入接口

    单片机学习笔记————指针的第二大好处,指针作为数组函数中的输入接口
    发表于 11-26 10:51 7次下载
    单片机学习笔记————<b class='flag-5'>指针</b>的第二大好处,<b class='flag-5'>指针</b>作为<b class='flag-5'>数组</b>在<b class='flag-5'>函数</b>中的输入接口

    二维数组数组指针以及指针数组

    二维数组数组指针以及指针数组
    的头像 发表于 08-16 09:02 2492次阅读

    数组指针不能混用的情况

    数组指针不能混用的情况  数组指针是 C/C++ 中非常常见的特性和概念。然而,在某些情况下,数组
    的头像 发表于 12-07 13:46 488次阅读

    数组指针不相同吗?数组指针有哪些区别

    数组就是指针指针就是数组,这样的言论在评论区看到不下于10次。
    的头像 发表于 12-13 16:34 895次阅读
    <b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>不相同吗?<b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>有哪些区别

    函数指针指针函数是不是一个东西?

    函数指针的本质是指针,就跟整型指针、字符指针一样,函数指针
    的头像 发表于 01-03 16:35 427次阅读
    <b class='flag-5'>函数</b><b class='flag-5'>指针</b>和<b class='flag-5'>指针</b><b class='flag-5'>函数</b>是不是一个东西?

    函数指针与回调函数的应用实例

    通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数函数
    的头像 发表于 03-07 11:13 310次阅读
    <b class='flag-5'>函数</b><b class='flag-5'>指针</b>与回调<b class='flag-5'>函数</b>的应用实例