公主赛高 发表于 2020-2-16 14:04:49

题中的程序怎么打啊

求大佬帮忙{:10_266:}

人造人 发表于 2020-2-16 14:09:50

我猜不出你的问题是什么

chxchxkkk 发表于 2020-2-16 14:43:47

本帖最后由 chxchxkkk 于 2020-2-16 14:45 编辑

#define F(n) 2*n, 你定义的 int n=2+3 = 5; F(5) = 2*5 = 10。这里 n=2+3,因为+的优先级比=高,所以 n的值是5 而示例中 f(3+2)中的3+2和你 n=3+2意义是不一样的,你再仔细看看 #define的相关知识

公主赛高 发表于 2020-2-16 14:55:12

人造人 发表于 2020-2-16 14:09
我猜不出你的问题是什么

题里的答案是8,我打出来的是10{:10_250:}

Sungne_jer 发表于 2020-2-16 15:03:16

把int n=3+2改为int n=3试试

公主赛高 发表于 2020-2-16 15:07:04

chxchxkkk 发表于 2020-2-16 14:43
#define F(n) 2*n, 你定义的 int n=2+3 = 5; F(5) = 2*5 = 10。这里 n=2+3,因为+的优先级比=高,所以 n的 ...

应该怎么表达那

公主赛高 发表于 2020-2-16 15:09:49

Sungne_jer 发表于 2020-2-16 15:03
把int n=3+2改为int n=3试试

显示为6 那样就跟题就没有关系了{:10_297:}

major_lyu 发表于 2020-2-16 15:15:30

本帖最后由 major_lyu 于 2020-2-16 21:40 编辑

宏定义展开是字符替换
#define f(n) 2*n

f(3+2)展开就是用3+2替换n,结果是2*3+2,所以结果是8
f((3+2)) 展开是 2*(3+2)=10;
好好体会一下区别

要验证可以用下面代码

#include <stdio.h>

#define f(n) 2*n
int main(void)
{
        printf("%d", f(3+2));
      printf("%d", f((3+2));

      return 0;
}

Sungne_jer 发表于 2020-2-16 15:30:14

公主赛高 发表于 2020-2-16 15:09
显示为6 那样就跟题就没有关系了

感觉楼下老哥说的有理

公主赛高 发表于 2020-2-16 15:58:23

major_lyu 发表于 2020-2-16 15:15
宏定义展开是字符替换
#define f(n) 2*n



谢谢大佬
页: [1]
查看完整版本: 题中的程序怎么打啊