You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Go与C语言中功能等价的代码输出结果不同?

编程语言表达式求值顺序差异:C vs Go

我正在学习编程语言及其背后的设计原理,以下是用于测试结合性与优先级的C语言和Go语言代码。

C语言测试代码

#include <stdio.h>

int a(int* n) {
    *n += 1;
    return 2*(*n) - 3;
}

int main() {
    int i = 4, j = 4;
    int sum1 = (i*2) + a(&i);
    int sum2 = a(&j) + (j*2);

    printf("sum1: %d\n", sum1);
    printf("sum2: %d\n", sum2);

    return 0;
}

Go语言测试代码

package main

import "fmt"

func a(n *int) int {
    *n += 1
    return 2*(*n) - 3;
}

func main() {
    i, j := 4, 4
    sum1, sum2 := (i*2)+a(&i), a(&j)+(j*2)

    fmt.Println("sum1:", sum1)
    fmt.Println("sum2:", sum2)
}

输出结果

C语言输出:

sum1: 15
sum2: 17

Go语言输出:

sum1: 17
sum2: 17

我观察到Go语言会优先执行a()函数,但难以理解其设计逻辑与背后的原理。我并非需要让两个sum结果相等,而是想理解为何两种语言的表达式求值顺序不同,更关注概念而非结果。

该代码旨在展示不同语言的求值顺序可能存在差异,例如在无指针的语言中,调用a()不会改变main函数中i、j的值,输出结果相同的原因也会不同。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:37:44