【发布时间】:2021-05-22 04:15:42
【问题描述】:
以下函数是HackerRank challenge 的一部分。 为什么取消引用的指针递增和递减不起作用?请参阅 cmets。
void send_all_acceptable_packages(town* source, int source_office_index, town* target, int target_office_index)
{
int pkg_idx;
post_office *src_office = &source->offices[source_office_index];
post_office *tgt_office = &target->offices[target_office_index];
volatile int *src_pkg_cnt = &src_office->packages_count;
volatile int *tgt_pkg_cnt = &tgt_office->packages_count;
for (pkg_idx = 0; pkg_idx < *src_pkg_cnt; pkg_idx++) {
package *pkg = &src_office->packages[pkg_idx];
if (is_acceptable(pkg, tgt_office)) {
move_package(pkg_idx, src_office, tgt_office);
pkg_idx -= 1;
/* Start - This doesn't work */
// *src_pkg_cnt--;
// *tgt_pkg_cnt++;
/* End */
/* Start - This works */
src_office->packages_count--;
tgt_office->packages_count++;
/* End */
}
}
}
【问题讨论】:
-
再次运算符优先级。您可以删除前缀的后缀:
--*src_pkg_cnt
标签: c pointers dereference