C语言如何理解返回指针的函数?

一、问题

有些函数的返回类型是指针类型,如何理解返回指针的函数?

二、解答

⼀个函数可以带回⼀个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。其概念与以前类似,只是带回的值的类型是指针类型⽽已。返回指针值的函数简称为指针函数。

定义指针函数的⼀般形式为:

cpp 复制代码
类型名*函数名(参数表列);

例如:

cpp 复制代码
int *fun(int x,int y)

fun 是函数名,调⽤它以后能得到⼀个指向整型数据的指针。x 和 y 是函数 fun 的形式参数,这两个参数也均为基本整型。这个函数的函数名前⾯有⼀个 * ,表⽰此函数是指针型函数,类型说明是 int 表示返回的指针指向整型变量。 指针函数实例,求长⽅形的周长。代码如下。

cpp 复制代码
#include <stdio.h>
int per(int a, int b);
int main()
{
    int iWidth, iLength, iResult;
    printf("请输⼊长⽅形的长: \n");

    scanf("%d", &iLength);
    printf("请输⼊长⽅形的宽:\n");
    scanf("%d", &iWidth);
    iResult = per(iWidth, iLength);
    printf("长⽅形的周长是:");
    printf("%d\n", iResult);
}
int per(int a, int b)
{
    return 2 * (a + b);
}

程序运⾏结果如图所示。

cpp 复制代码
请输⼊长⽅形的长: 
50
请输⼊长⽅形的宽:
30
长⽅形的周长是:160

上⾯程序⾃定义了⼀个函数 per( ) ,⽤来求长⽅形的⾯积,下⾯就来看⼀下在上⾯程序的基础上如何使⽤返回值为指针的函数。代码如下。

cpp 复制代码
#include <stdio.h>
int *per(int a, int b);
int Perimeter;
int main()
{
    int iWidth, iLength;
    int *iResult;
    printf("请输⼊长⽅形的长: \n");
    scanf("%d", &iLength);
    printf("请输⼊长⽅形的宽:\n");
    scanf("%d", &iWidth);
    iResult = per(iWidth, iLength);
    printf("长⽅形的周长是:");
    printf("%d\n", *iResult);
}
int *per(int a, int b)
{
    int *p;
    p = &Perimeter;
    Perimeter = (a + b) * 2;
    return p;
}

程序中⾃定义了⼀个返回指针值的函数。

cpp 复制代码
int *per(int x,int y)

三、总结

将指向存放着所求的长⽅形周长的变量的指针变量返回。注意这个程序本⾝并不需要写成这种形式,因为对这种问题像上⾯这样编写出的程序并不简便,这⾥这样写只是起到讲解的作⽤。

相关推荐
QiLinkOS17 分钟前
从技术到资产的跃迁:企业专利布局的深层逻辑
c语言·数据结构·c++·单片机·嵌入式硬件·算法·开源
一只鹿鹿鹿18 分钟前
信息化项目管理规范(参考Word文件)
java·大数据·运维·开发语言·数据库
XGeFei23 分钟前
python中子线程与主线程的关系
开发语言·python
Chase_______26 分钟前
【Java杂项】final 关键字详解:变量、方法、类限制与引用可变性
java·开发语言·python
ruxingli36 分钟前
Golang iota详解
开发语言·后端·golang
我材不敲代码37 分钟前
Python venv 虚拟环境从入门到精通 + uv 高性能替代工具实战指南
开发语言·python·uv
l1t1 小时前
DeepSeek总结的使用实体-组件-系统和基于存在性处理进行Python编程18-20
开发语言·python
磊 子1 小时前
STL之deque和list以及两者与vector的对比
开发语言·c++·list
凤山老林1 小时前
DDD(领域驱动设计)在复杂业务系统中的落地指南
java·开发语言·数据库·ddd·领域驱动
凯瑟琳.奥古斯特1 小时前
子查询原理与实战案例解析
开发语言·数据库·职场和发展·数据库开发