作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
谁能告诉我这个程序是如何在内部执行的
#include<stdio.h>
typedef int (* afp)(int a, int b);
int abc(int x, int y)
{
return x+y;
}
int main()
{
afp ab;
ab = &abc;
printf("\n%d - %d - %d", ab(20, 13));
return 0;
}
得到的输出是
33 - 20 - 4195712
如您所见,第一个 %d 被替换为预期结果 20+13,但下一个 %d 总是被函数的第一个参数替换,最后一个 %d 被一个垃圾替换..
--编辑
我已经添加了三个 %d 但只将一个参数传递给 printf,但是第二个 %d 如何总是被函数的第一个参数替换??
最佳答案
您正在导致未定义的行为。您指定了三个参数 "\n%d - %d - %d"
,但您只传递了一个 ab(20, 13)
。
第一个输出是函数调用 ab(20, 13)
返回的结果,其余的没有意义。
既然你传递了一个参数,你应该这样调用它:
printf("\n%d", ab(20, 13));
关于c - 当参数之一是函数调用时,printf 如何在 c 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28735944/
我是一名优秀的程序员,十分优秀!