我收到了一个 friend 的挑战。
作为这个挑战的一部分,我写了一个函数来从 String
中获取一个 int
,该函数获取一个 chars
数组和一个指向编号,索引。
为了检查这个函数是否有效,我用 2 个数字运行它并观察输出。
在我的 main
中,我打印了 4 个值:
int t = 0;
printf("%d -> %d, %d -> %d\n", t, getNumber("99", &t), t, getNumber("as48", &t));
我应该得到:0 -> 99, 2 -> 48
。
输出为:2 -> 99, 0 -> 0
。
经过几次测试,我看到它在函数结束后打印 t
,并且它首先执行最后一个函数调用。
我明白这是有道理的:在 Assembly
中,最后一个参数首先被压入堆栈,因此当它被弹出时,参数将以正确的顺序排列。
我的问题是:
我可以以“正常”方式打印它,使其看起来“应该”吗?如何?
最佳答案
Can I print in in a "normal" way so it will look as it "should"? How?
不能保证 C 中函数参数的求值顺序。所以,答案是否。
另请注意,printf
函数调用会调用未定义的行为,因为其参数的评估顺序未排序。
关于c - printf - 带指针的 "unexpected"输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34877650/