gpt4 book ai didi

c - 函数调用的评估顺序

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:19 24 4
gpt4 key购买 nike

假设我有这样一个函数:

int *calculator(int *pointer1, int *pointer2) {
int *pointer3 = malloc(15);
return pointer3; //not an actual return, just an example function
}

然后在 main 中,我多次调用它:

int main(void) {
int array[40];
int *ptr, *ptr2, *ptr3, *ptr4;
ptr = ptr2 = ptr3 = ptr4 = array; // please don't mind this, i don't actually write code this way.
int *answer = calculator(calculator(ptr, ptr2), calculator(ptr3,calculator(ptr4, ptr5));
free(answer);
return 0;
}

函数调用的顺序是从右到左吗?最后一次调用 calculator(ptr4, ptr5) 会是第一个计算并返回的函数吗?

最佳答案

你要问的取决于有效的调用树,在你的情况下你有

0 calculator
1 calculator
ptr
ptr2
2 calculator
ptr3
3 calculator
ptr4
ptr5

在 C 中,您无法保证函数调用参数的求值顺序,但在进入有效函数调用之前有一个序列点。

这意味着您确定在调用函数本身之前,参数的所有副作用都已完全解决。

总结一下:

  • 3 calculator 必须在 2 calculator 之前调用
  • 要调用0 calculator,必须调用1 calculator2 calculator 但它们的顺序未指定(可以是 1,2 或 2 ,1)

请查看this回答进一步解释。

关于c - 函数调用的评估顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32491143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com