野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 山外メ雲ジ

【每日一题讲解】++的用法及入栈顺序

  [复制链接]
发表于 2014-10-24 21:20:54 | 显示全部楼层
我认为是0,1,0
回复 支持 反对

使用道具 举报

发表于 2014-10-25 21:49:13 | 显示全部楼层
1,0,2   应该是这个
回复 支持 反对

使用道具 举报

发表于 2014-10-28 15:12:52 | 显示全部楼层
a+b,++b,a++
答案是A
回复 支持 反对

使用道具 举报

发表于 2014-10-31 14:53:02 | 显示全部楼层
答案应该是B
回复 支持 反对

使用道具 举报

发表于 2014-11-1 13:47:31 | 显示全部楼层
a=0,b=1,a+b=2
回复 支持 反对

使用道具 举报

发表于 2014-11-8 11:08:29 | 显示全部楼层
本帖最后由 gxx9203 于 2014-11-8 11:12 编辑

b     哈                 
回复 支持 反对

使用道具 举报

发表于 2014-11-13 19:46:11 | 显示全部楼层
bbbbbbbbbbbbbbb
回复 支持 反对

使用道具 举报

发表于 2014-11-13 21:45:26 | 显示全部楼层
学习学习,对函数入栈不太懂
回复 支持 反对

使用道具 举报

发表于 2014-11-14 22:12:56 | 显示全部楼层
简单。。。。
回复

使用道具 举报

发表于 2014-11-15 21:28:05 | 显示全部楼层
认真学习真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2014-11-18 11:14:42 | 显示全部楼层
认真学习真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2014-11-18 15:06:58 | 显示全部楼层
打印0,然后a=1,b=1,然后打印,然后打印1+1即2,所以选b
回复 支持 反对

使用道具 举报

发表于 2014-11-19 08:47:02 | 显示全部楼层
为什么不是B呢?没见过C中有提到过printf出栈入栈
回复 支持 反对

使用道具 举报

发表于 2014-11-19 10:12:14 | 显示全部楼层
ahu逍遥 发表于 2014-11-19 08:47
为什么不是B呢?没见过C中有提到过printf出栈入栈

VS2010运行结果0,1,2
回复 支持 反对

使用道具 举报

发表于 2014-11-19 10:40:50 | 显示全部楼层
A、0 1 0
看结果了。
回复 支持 反对

使用道具 举报

发表于 2014-11-19 13:29:57 | 显示全部楼层
代码简化, 促进跨平台开发的目的.
 typedef 行为有点像
#define 宏,用其实际类型替代同义字。
 不同点:typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。

用法一:
[code=cpp]typedef int (*MYFUN)(int, int);[/code]

这种用法一般用在给函数定义别名的时候
上面的例子定义MYFUN
是一个函数指针, 函数类型是带两个int 参数, 返回一个int

在分析这种形式的定义的时候可以用下面的方法:
先去掉typedef 和别名,
剩下的就是原变量的类型.
去掉typedef和MYFUN以后就剩:
[code=cpp]int (*)(int, int)[/code]

用法二:
typedef给变量类型定义一个别名.
[code=cpp]typedef struct{
int a;
int b;
}MY_TYPE;[/code]

这里把一个未命名结构直接取了一个叫MY_TYPE的别名, 这样如果你想定义结构的实例的时候就可以这样:
[code=cpp]MY_TYPE tmp;[/code]

第二种用法:typedef
原变量类型
别名
typedef补充内容:
例如:
  [code=cpp]typedef int (*PF) (const char *, const char *);[/code]  这个声明引入了
PF 类型作为函数指针的同义字,该函数有两个 const char * 类型的参数以及一个 int 类型的返回值。
简单的函数指针的用法
[code=cpp]//形式1:返回类型(*函数名)(参数表)
char(*pFun)(int);
char glFun(int a){return;}
void main()
{
pFun =glFun;
(*pFun)(2);
}[/code]
第一行定义了一个指针变量pFun.它是一个指向某种函数的指针,这种函数参数是一个int类型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还未对它进行赋值。
第二行定义了一个函数glFun().该函数正好是一个以int为参数返回char的函数。我们要从指针的层次上理解函数-函数的函数名实际上就是一个指针,函数名指向该函数的代码在内存中的首地址。
使用typedef更直接
[code=cpp]typedef  char(*PTRFUN)(int)
PTRFUN pFun;
char glFun(int a){return;}
void main()
{
    pFun = glFun;
    (*pFun)(2);
}[/code]
typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
下面是个例子:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
在typedef的使用中,最麻烦的是指向函数的指针,如果没有下面的函数,你知道下面这个表达式的定义以及如何使用它吗?

[code=cpp]int(*s_calc_func(char op))(int, int);[/code]

如果不知道,请看下面的程序,里面有比较详细的说明


[code=cpp]
// 定义四个函数
int add(int, int);
int sub(int, int);
int mul(int, int);
int div(int, int);
// 定义指向这类函数的指针
typedef int (*FP_CALC)(int, int);

// 我先不介绍,大家能看懂下一行的内容吗?
int (*s_calc_func(char op))(int, int);

// 下一行的内容与上一行完全相同,
// 定义一个函数calc_func,它根据操作字符 op 返回指向相应的计算函数的指针
FP_CALC calc_func(char op);

// 根据 op 返回相应的计算结果值
int calc(int a, int b, char op);

int add(int a, int b)
{
   
return a + b;
}
int sub(int a, int b)
{
   
return a - b;
}
int mul(int a, int b)
{
   
return a * b;
}
int div(int a, int b)
{
   
return b? a/b : -1;
}
// 这个函数的用途与下一个函数作业和调用方式的完全相同,
// 参数为op,而不是最后的两个整形
int (*s_calc_func(char op)) (int, int)
{
   
return calc_func(op);
}

FP_CALC calc_func(char op)
{
   
switch (op)
   
{
   
case '+': return add;
   
case '-': return sub;
   
case '*': return mul;
   
case '/': return div;
   
default:
      
return NULL;
   
}
   
return NULL;
}

int calc(int a, int b, char op)
{
   
 FP_CALC fp = calc_func(op); // 下面是类似的直接定义指向函数指针变量
      
// 下面这行是不用typedef,来实现指向函数的指针的例子,麻烦!
      
int (*s_fp)(int, int) = s_calc_func(op);
      
// ASSERT(fp == s_fp); // 可以断言这俩是相等的
   
  if (fp) return fp(a, b);
   
 else return -1;
}

void test_fun()
{
   
int a = 100, b = 20;
   
printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));
   
printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));
   
printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*'));
   
printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/'));
}
[/code]

运行结果
  
calc(100, 20, +) = 120
  
calc(100, 20, -) = 80
  
calc(100, 20, *) = 2000
  
calc(100, 20, /) = 5
回复 支持 反对

使用道具 举报

发表于 2014-11-19 19:01:29 | 显示全部楼层
012                     
回复 支持 反对

使用道具 举报

发表于 2014-11-24 15:22:56 来自手机 | 显示全部楼层
看看答案。。。。。。。。。
回复

使用道具 举报

发表于 2014-11-24 22:05:42 | 显示全部楼层
选择b 考的是先加 和后加的问题吧。。
回复 支持 反对

使用道具 举报

发表于 2014-11-25 14:17:38 | 显示全部楼层
AAAAAAAAAAAAAAA
回复 支持 反对

使用道具 举报

发表于 2014-11-25 23:03:00 | 显示全部楼层
BBBBBBBBBBBBBBBBBBBB
回复 支持 反对

使用道具 举报

发表于 2014-11-28 16:13:11 | 显示全部楼层
A KKKKKKKKKKK
回复 支持 反对

使用道具 举报

发表于 2014-11-30 22:48:11 | 显示全部楼层
B,a++先打印,++b先加后打印,a+b=2
回复 支持 反对

使用道具 举报

发表于 2014-11-30 22:49:12 | 显示全部楼层
毁三观啊。。。。。。。。。
回复

使用道具 举报

发表于 2014-12-2 20:18:43 | 显示全部楼层
在A和B之间徘徊
回复 支持 反对

使用道具 举报

发表于 2014-12-2 20:20:29 | 显示全部楼层
可变参数的 函数,入栈顺序从右往左
回复 支持 反对

使用道具 举报

发表于 2014-12-7 13:46:28 | 显示全部楼层
b。。。。。。。。。。。。。。。
回复

使用道具 举报

发表于 2014-12-8 14:09:46 | 显示全部楼层
b               
回复 支持 反对

使用道具 举报

发表于 2014-12-9 15:06:20 | 显示全部楼层
B                                         
回复 支持 反对

使用道具 举报

发表于 2014-12-9 21:50:31 | 显示全部楼层
我选择A啊啊
回复 支持 反对

使用道具 举报

发表于 2014-12-11 15:12:24 | 显示全部楼层
好东西,顶一个
回复 支持 反对

使用道具 举报

发表于 2014-12-11 15:32:19 | 显示全部楼层
为什么我运行的也是0,1,2啊
回复 支持 反对

使用道具 举报

发表于 2014-12-12 09:07:26 | 显示全部楼层
从后向前计算
回复 支持 反对

使用道具 举报

发表于 2014-12-15 17:56:28 | 显示全部楼层
不晓得------------------
回复 支持 反对

使用道具 举报

发表于 2014-12-15 17:56:45 | 显示全部楼层
不晓得------------------
回复 支持 反对

使用道具 举报

发表于 2014-12-16 19:45:12 | 显示全部楼层
a  应该是

回复 支持 反对

使用道具 举报

发表于 2014-12-16 22:02:52 | 显示全部楼层
这都要隐藏啊……
回复 支持 反对

使用道具 举报

发表于 2014-12-17 21:38:30 | 显示全部楼层
Bbbbbbbbbbbbb
回复 支持 反对

使用道具 举报

发表于 2014-12-18 07:32:42 来自手机 | 显示全部楼层
学到不少知识了,这题选a
回复 支持 反对

使用道具 举报

发表于 2014-12-18 13:33:25 | 显示全部楼层
初步理解选b
回复 支持 反对

使用道具 举报

发表于 2014-12-18 13:38:33 | 显示全部楼层
没有出入栈的概念,还是要多学习啊
回复 支持 反对

使用道具 举报

发表于 2014-12-18 16:25:17 | 显示全部楼层
学习温顾下以前学的东西挺好的。
回复 支持 反对

使用道具 举报

发表于 2014-12-19 15:00:49 | 显示全部楼层
,,,,,,,,,,,,,,,,,,,,c
回复

使用道具 举报

发表于 2014-12-19 16:40:49 | 显示全部楼层
选择D。。。。。。。。。。。。。。。。
回复

使用道具 举报

发表于 2014-12-19 16:42:45 | 显示全部楼层
执行 ++b ,先自加 ,再 赋值;执行 a++ ,先赋值再自加。反过来了我
回复 支持 反对

使用道具 举报

发表于 2014-12-19 16:45:26 | 显示全部楼层
B
回复

使用道具 举报

发表于 2014-12-22 00:32:07 来自手机 | 显示全部楼层
我只想看答案
回复 支持 反对

使用道具 举报

发表于 2014-12-22 19:58:09 | 显示全部楼层
0 1 2 选择c
回复

使用道具 举报

发表于 2014-12-22 21:26:07 | 显示全部楼层
答案选B...............
回复

使用道具 举报

发表于 2014-12-25 21:15:47 | 显示全部楼层
说 好的答案呢
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-20 12:07 , Processed in 0.040448 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表