c - 除一种情况外的功能交换功能
问题描述
此交换函数功能齐全,除非输入是具有相同值的两个数组:
void permuter(int* a, int* b) {
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
int main(void) {
int i[0];
int j[0];
i[0] = 5;
j[0] = 5;
permuter(&j[0], &i[0]);
return 0;
}
使用printf();
i[0] = 0
和j[0] = 0
。
解决方案
这是智能交换的常见问题(另请参见:XOR 交换)。做它直接的方式,用一个临时的!
int t = *a;
*a = *b;
*b = t;
在实践中,您可能会检查指针是否不同以避免此问题,但*a + *b
在溢出时仍有未定义的行为,没有理由担心这一点。
推荐阅读
- python - Python - 用嵌套字典中的空字符串替换无
- java - 基本的 java 数组元素比较无法正常工作
- java - 使 filterWhen() 与 Mono 谓词并行
- python-3.x - 每当另一列更改时求和
- android - 如何获得 MANAGE_EXTERNAL_STORAGE 权限
- linux - crontab 无法运行 shell
- mysql - 如何建立 AWS 数据库和 Azure 数据工厂之间的连接?
- python - 获得最大数量的产品给予金钱限制
- java - 在 Apache Ignite 中释放锁定时出现 IllegalMonitorStateException
- flutter - 尝试为 iOS 运行或构建 Flutter 项目时出错