1594|0

1140

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

深入理解C语言函数参数为指针 [复制链接]

我们直接做一个练习,定义一个函数,用来交换两个变量的内容。

void swap(int *x, int *y);
void main(){
    int x = 20, y = 10;
    swap(&x, &y);
    printf("x = %d, y = %d", x ,y);
}
void swap(int *x, int *y){
    int t;
    t = *x;
    *x = *y;
    *y = t;
}

代码非常简单,我也就不细讲了。这里传入的参数为指针,所以调用 swap 方法后 x,y 的内容发生了交换。如果直接传入 x,y,那么交换只在 swap 中有效,在 main 中并没有交换。

4.2、函数的返回值为指针

返回值为指针的函数声明如下:

数据类型 *函数名(参数列表){
    函数体
}
//例如:
int s;
int *sum(int x, int y){
    s = x + y;
    return &s;
}

在函数调用前要声明需要对函数声明(有点编译器不需要)

int s;
void mian(){
    int *r = sum(10, 9);
    printf("10 + 9 + %d", *r);
}
int *sum(int x, int y){
    s = x + y;
    return &s;
}

除了上面的操作,更实用的是返回一个指向数组的指针,这样就实现了返回值为数组。

指向函数的指针

C 语言中,函数不能嵌套定义,也不能将函数作为参数传递。但是函数有个特性,即函数名为该函数的入口地址。我们可以定义一个指针指向该地址,将指针作为参数传递。

函数指针定义如下:

数据类型 (*函数指针名)();
1
函数指针在进行“*”操作时,可以理解为执行该函数。函数指针不同与数据指针,不能进行+整数操作。

下面举个例子,来使用函数指针:

#include <string.h>
/**
*    定义一个方法,传入两个字符串和一个函数指针 p,用 p 对两个字符串进行操作
*/
void check(char *x, char *y, int (*p)());
void main(){
    //string.h 库中的函数,使用之前需要声明该函数。字符串比较函数
    int strcmp();
    char x[] = "Zack";
    char y[] = "Rudy";
    
    //定义一个函数指针
    int (*p)() = strcmp;

    check(x, y, p);
}
void check(char *x, char *y, int (*p)()){
    if(!(*p)(x, y)){
        printf("相等");
    }else{
        printf("不相等");
    }
}

利用函数指针调用方法具体操作如下:

(*p)(x, y);
1
指针除了这些地方,还在结构体中用处巨大。

 

 
点赞 关注(1)

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表