数组元素移位函数实现异常:函数内交换生效但原数组未改变
问题分析与解决方案
你的代码无法交换数组元素的核心原因是C语言默认采用值传递:传给mv函数的numbers[0]和numbers[1]是原元素的副本,函数内部交换的只是这两个副本的值,完全不会影响原数组里的元素。
修正方案1:使用指针传递(直接操作变量地址)
通过传递元素的内存地址,让函数直接修改原地址中的值:
#include <stdio.h> void mv(int *n1, int *n2); int main() { int numbers[] = { 0, 1 }; mv(&numbers[0], &numbers[1]); // 传递元素的地址 printf("%i,%i", numbers[0], numbers[1]); } void mv(int *n1, int *n2) { int temp = *n1; // 解引用指针,获取原变量的值 *n1 = *n2; // 修改原地址中的值 *n2 = temp; }
修正方案2:直接操作数组与索引
让函数接收数组和要交换的元素索引,直接通过数组索引修改原元素:
#include <stdio.h> void mv(int arr[], int idx1, int idx2); int main() { int numbers[] = { 0, 1 }; mv(numbers, 0, 1); printf("%i,%i", numbers[0], numbers[1]); } void mv(int arr[], int idx1, int idx2) { int temp = arr[idx1]; arr[idx1] = arr[idx2]; arr[idx2] = temp; }
以上两种方案都能实现数组元素的真正交换,运行后都会输出1,0。
内容的提问来源于stack exchange,提问作者NotFound
相关产品推荐
相关产品推荐

