有关于C语言的一道小问题,有关printf函数的的原理

发布于 2022-08-28 12:35:04 字数 271 浏览 12 评论 0

下面的程序输出结果是多少?

#include<stdio.h>

main()
{
    int b = 3;
    int arr[] = {6,7,8,9,10};
    int *ptr = arr;
    *(ptr++)+=123;              
        printf("%d,%d\n",*ptr,*(++ptr));  
}

还有就是为何我Mac下的gcc和Linux的gcc出现的结果不一样???

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

她比我温柔 2022-09-04 12:35:04

简单地说,就是一个由其定义行为不确定的程序在不同平台了产生不同的结果是很正常的事情。应该避免这种未定义的行为。如果你使用 gcc 或者 clang,请加上 -O2 -Wall 命令行参数。

PS: 这么短的程序里竟然有两处行为未定义的地方……

夜夜流光相皎洁 2022-09-04 12:35:04

printf("%d,%d\n",ptr,(++ptr));
先执行ptr,还是先执行(++ptr),取决与程序指定的调用惯例
调用惯例约定了函数参数从左至右压栈,还是从右至左压栈

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文