您的位置:首页 > 其它

14返回指针的函数与指向函数的指针

2015-01-22 14:43 218 查看


一、返回指针的函数

 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的。

返回指针的函数的一般形式为:类型名 * 函数名(参数列表)

 比如下面这个函数,返回一个指向char类型变量的指针

int main()

{

    // 定义一个字符串变量

    char str[] = "lmj";

    

    // 调用函数

    char *dest = upper(str);

    

    printf("%s", dest);

    return 0;

}
// 将字符串str中的小写字母变成大写字母,并返回改变后的字符串
// 注意的是:这里的参数要传字符串变量,不能传字符串常量
char * upper(char *str) {
    // 先保留最初的地址。因为等会str指向的位置会变来变去的。
    char *dest = str;
    
    // 如果还不是空字符
    while (*str != '\0') {
        // 如果是小写字母
        if (*str >= 'a' && *str <= 'z') {
            // 变为大写字母。小写和大写字母的ASCII值有个固定的差值
            *str -= 'a' - 'A';
        }
        
        // 遍历下一个字符
        str++;
    }
    
    // 返回字符串
    return dest;
}

=====================================================

//  main.c

//  返回指针的函数

//

//  Created by mj on 13-3-26.

//  Copyright (c) 2013年 itcast. All rights reserved.

//

#include <stdio.h>

char * test() {

    return "itcast";
}

int main(int argc, const char * argv[])
{
    printf("%s", test());
    return 0;

}

==============================================================


1.为什么指针可以指向一个函数?

函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。

 


2.指向函数的指针的定义

定义的一般形式:函数的返回值类型 (*指针变量名)(形式参数1, 形式参数2, ...);

注意:形式参数的变量名可以省略,甚至整个形式参数列表都可以省略

//

//  main.c

//  指向函数的指针

//

//  Created by mj on 13-3-26.

//  Copyright (c) 2013年 itcast. All rights reserved.

//

#include <stdio.h>

int sum(int a, int b) {
    int c = a + b;

    
    printf("%d + %d = %d\n", a, b, c);

    
    return c;
}

int minus(int a, int b) {
    return a - b;
}

int mul(int a, int b) {
    return a * b;
}

// count函数是用来做a跟b之间的运算

// 至于做什么运算,取决于p
int count(int a, int b, int (*p)(int, int))
{
    return p(a, b);
}

int main(int argc, const char * argv[])
{

    
    int result = count(5, 6, mul);

    
    printf("result:%d", result);

    

//    // 定义了一个指向函数的指针变量p

//    // 被p指向的函数:返回值为int类型,接收两个int类型的参数

//    int (*p)(int, int);

int (*p)(int a, intb),第1个int代表sum函数的返回值是int类型,然后*p是用括号()包住的,后面的int a和int b代表着sum函数的形参

  

//    // 让指针变量p指向sum函数

//    p = sum;

//    

//    // 利用指针变量p间接调用sum函数

//    // (*p)(5, 6);

//    p(5, 6);
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: