c - printf - 带指针的 "unexpected"输出

标签 c pointers printf

我收到了一个 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/

相关文章:

c - Node->next!=NULL 和 Node!=NULL 在 C 中的区别

c - 有没有办法在 strace 输出中查看原始指针背后的值?

c - 这两个实现之间有区别吗?

c++ - 如何使用引用调用从 C++ 函数中获取 char** 类型变量的值?

c - 从不同地方调用相同功能时的行为不一致

c - 使用 dup2 重定向 printf 失败

c - 如何将 ptr 增加到字符串数组的第一个元素

c++ - 从指针数组中删除元素 - C++

c++ - 当需要指向全局函数的指针时如何使用指向成员函数的指针?

C snprintf 附加结构成员 char*