gpt4 book ai didi

c - 如何修复按引用传递未正确更改值

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

我有一个函数,它应该更改在 main 中声明和定义的值。在函数中,每次进行比较时,按引用传递的参数应该递增。该函数声明如下:

int binSearch (int arr[], int size, int target, int * numComparisons) { ... 
(*numComparisons)++; }

在函数范围内,就这样完成了。但是,函数完成后,numComparisons 的值实际上并没有改变。我写了一个 printf 表达式来在循环的每次迭代中输出 numComparisons 的值,它确实可以正常工作(它输出 1、2 等等),但是在函数运行之后,作为参数传递给 binSearch 的变量停留在我将其初始化为的值。我的问题是什么?
(在主内)

printf("%d, %d\n", binSearch(testArray, 100, 75, numCompAddress), numCompTest); 
// this returns the index and the incorrect value of numComparisons

最佳答案

当调用 printf("%d, %d\n", binSearch(testArray, 100, 75, numCompAddress), numCompTest); 时,子表达式的求值顺序未定义标准说:

3.4.4

1 unspecified behavior

use of an unspecified value, or other behavior where this International Standard provides two or more possibilities and imposes no further requirements on which is chosen in any instance

2 EXAMPLE An example of unspecified behavior is the order in which the arguments to a function are evaluated.

在您的情况下,第二个参数 numCompTest 的值在调用函数之前发出。更改为:

printf("%d, ", binSearch(testArray, 100, 75, numCompAddress));
printf("%d\n", numCompTest);

你会看到你想要的。

关于c - 如何修复按引用传递未正确更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54449116/

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