为何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
相关产品推荐
相关产品推荐

