Sboy 发表于 2017-1-18 11:00:10

关于 带你学C带你装13第一季 S1E30 奇怪的地方

本帖最后由 Sboy 于 2017-1-18 16:14 编辑

S1E30   函数指针和指针函数



最下面例子根据 输入公式计算 结果   

当输入5-+    回车结果 是   5 - 134513251

    输入5+-回车结果是       5 + 134513251

请问   134513251怎么来的    {:9_223:}


代码:

#include <stdio.h>

       int add(int x,int y);
       int sub(int x1,int y1);
       int calc(int (*p)(int a,int b),int c, int d);
       int (*choice(char op))(int,int);

       int add(int x,int y)
       {
        return x+y;
       }

      int sub(int x1, int y1)
      {
         return x1-y1 ;
      }

      int calc(int (*p)(int a,int b),int c,int d)
      {
       return (*p)(c,d);
      }

      int (*choice(char op)) (int ,int)
      {
              switch(op)

             {
                     case '+':return add;
                   case '-':return sub;
            }
      }


int main()
{
        int n1;
        int n2;
        char op;
        int (*p)(int,int);

        printf("输入计算公式(如:1+3):");
        putchar('\n');
        scanf("%d%c%d",&n1,&op,&n2);

        p=choice(op);
        printf("%d %c %d= %d\n",n1,op,n2,calc(p,n1,n2));
        return 0;
}

人造人 发表于 2017-1-18 13:31:24

调试吗

因为你输入 5-+
scanf赋值到 op变量后终止,n2并没有赋值,也没有初始化

Sboy 发表于 2017-1-18 14:02:55

本帖最后由 Sboy 于 2017-1-18 14:08 编辑

人造人 发表于 2017-1-18 13:31
调试吗

因为你输入 5-+


嗯      n2故意没有输入值   

那这个134513251 代表什么呢 怎么出来的呢    <人鱼大神.h>

本银纯 彩笔   {:10_266:}

人造人 发表于 2017-1-18 14:20:31

Sboy 发表于 2017-1-18 14:02
嗯      n2故意没有输入值   

那这个134513251 代表什么呢 怎么出来的呢   


可以看到没有初始化,n2就是 0xcccccccc
0xcccccccc 就是-858993460

Sboy 发表于 2017-1-18 14:42:05

人造人 发表于 2017-1-18 14:20
可以看到没有初始化,n2就是 0xcccccccc
0xcccccccc 就是-858993460

{:9_228:} get

多谢
页: [1]
查看完整版本: 关于 带你学C带你装13第一季 S1E30 奇怪的地方