发布网友 发布时间:2022-03-31 00:32
共3个回答
热心网友 时间:2022-03-31 02:02
楼主肯定是把它当函数用了😂,
#define MAX(x, y) (x) < (y) ? (x) : (y)
10 * MAX(i, j)展开之后就是:
10*i>j?i:j
这样一代入就是:
10*10>15?10:15
很显然是成立的,所以就取10了,
而不是你想当然的
10*(x>y?x:y)
很自然而然的就加上括号了😂😂,这是很多人都会犯的错误,宏定义可以实现类似函数的功能,但实际上终归不是函数,而且宏定义括号里的参数也不是真正的参数,所以不要主观的加括号。在宏展开时对参数进行的只是文本替换,如果在整个三目运算符外面套一个括号的话,结果就是150了
望采纳😁😁😁
热心网友 时间:2022-03-31 03:20
printf("%d,%s"\n,--i,p++); 应该是printf("%d,%s\n",--i,p++); *p=s+3;这个是指p 指向s数组的第四个元素(4); printf("%d,%s\n",--i,p++);打印--i的值与p指向数组的元素 (从s[3](即4)开始到最后一个元素 p指向s[]的地址,操作p等于操作s[]数组追问靠恁娘
热心网友 时间:2022-03-31 04:54
做这类宏相关的题目,最好在草稿纸上进行宏展开,展开后k的赋值表达式为:
k=10*(i)>(j)?(i):(j)代入对应变量值,即为:
k=10*10 > 15 ? 10 : 15因为100>15 为真,所以最后 k=10