指针

今天学了指针的运用
1 指针数组 *a[3]
2 一维数组 a[3] *p=a;
3 二维数组a[3][4] (*p)3
4 函数指针 double(*p[4])(double num1, double num2) = { f1, f2, f3, f4 };(四个函数)printf(“\n%g %c %g = %g”, a, op, b, p[2](a, b));(调用的方式)

//简易计算器
//加
double f1(double num1, double num2)
{
    return num1 + num2;
}

//减
double f2(double num1, double num2)
{
    return num1 - num2;
}

//乘
double f3(double num1, double num2)
{
    return num1 * num2;
}

//除
double f4(double num1, double num2)
{
    return num1 / num2;
}

void main()
{
    double a, b;
    char op;
    double(*p[4])(double num1, double num2) = { f1, f2, f3, f4 };
    while (1)
    {
        printf("\n请输入算术表达式,如: 3 + 5,如果想结束计算请按0f0\n");
        scanf("%lf %c %lf", &a, &op, &b);
        getchar();
        if (a == 0 && op == 'f' && b == 0)
        {
            break;
        }
        switch (op)
        {
        case '+':
            printf("\n%g %c %g = %g", a, op, b, p[0](a, b));
            break;
        case '-':
            printf("\n%g %c %g = %g", a, op, b, p[1](a, b));
            break;
        case '*':
            printf("\n%g %c %g = %g", a, op, b, p[2](a, b));
            break;
        case '/':
            printf("\n%g %c %g = %g", a, op, b, p[3](a, b));
            break;
        default:
            printf("\n输入有误!!");
        }
    }
    printf("\n谢谢使用!");
    getchar();
}

写这题时想到了函数的调用,不过没想到函数指针可以行数组一样直接调用取值,对于原理是清楚的不过在书写的时候还是有点小问题,运行出来的东西不是我想要的,感觉有点飘了;

函数指针: 指向函数的指针变量;

int (*p)(int n1,float n2);

1,复制函数头;
2,将函数名换成(*指针名);

指针数组: 元素都是指针的数组;
定义格式: int a = 3; int a[10]; int *a[10];

int p;          //整形变量
 int *p;         //指向整形变量的指针变量(指针)
int p[];        //整形数组
int *p[5];      //指向整形变量的指针的数组(指针数组)
int (*p)[5];    //指向每一行有5列的数组的指针(数组指针)可以跨行    二级指针
int p(){};      //返回值为整形的函数
int (*p)();     //指向上面↑这种类型函数的指针(函数指针)
int (*p[4])();  //存放↑这种类型指针的数组(函数指针数组)
int (*)[5] p(){}; //返回71行类型的指针数组的函数(数组指针函数)
int* p(){};       //返回值为指针类型的函数(指针函数)
int* (*p)();    //指向76行这种类型的函数的指针(指针函数指针) 
int* (*p[5])(); //装有5个77行这种类型的指针的数组(指针函数指针数组)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值