普通变量与数组的函数传参差异

发布时间:2026/7/24 12:44:28
普通变量与数组的函数传参差异 先来讲讲这两个的概念分别是啥1.普通两个int变量传参是值传递拷贝一份数据函数改的是副本主函数原值不变。2.冒泡排序传的是数组名是地址传递函数和主函数共用同一块内存所以修改有效。例一值传递不改变主函数里变量的值//两数交换 void swap(int x, int y) { int tmp x; x y; y tmp; } int main() { int n 0; int m 0; printf(请输入两个交换的数\n); scanf(%d %d,n,m); printf(交换前为n %d m %d\n,n,m); swap(n, m); printf(交换后为n %d m %d\n, n, m); return 0; }代码运行结果解说交换前为n 10m 20通过swap函数我们是想改变这两个数的输出顺序交换后为n 20m 10但是并没有按照我们的想法来这是为什么呢因为swap函数只是把函数里nm的值复制了一份复制给了这个函数变量里的xy通过中间变量tmpx与y里面的值改变了并没有改变主函数里面nm的值所以输出结果还是为交换后为n 10m 20那应该通过什么方法才可以达到我们想要的两数交换结果用指针。例二地址传递实现两数的交换//两数交换 传址 void swap(int *x, int *y) { int tmp *x; *x *y; *y tmp; } int main() { int n 0; int m 0; printf(请输入两个交换的数\n); scanf(%d %d, n, m); printf(交换前为n %d m %d\n, n, m); swap(n, m); printf(交换后为n %d m %d\n, n, m); return 0; }代码运行结果解说通过给swap函数传递nm地址同时在函数swap参数里面我们使用指针变量int *xint *y来接受传来的地址这里还要注意在swap函数体中不要将*x写为x最终我们实现了两个数的交换。接下来我们来画一个回顾一下例三用数组传递地址冒泡排序void bubble_sort(int arr[], int sz) { int i 0; int j 0; //确定趟数 for (i 0;i sz - 1;i) { //一趟内部比较 for (j 0;j sz - 1 - i;j) { if (arr[j] arr[j 1]) { int tmp arr[j]; arr[j] arr[j 1]; arr[j 1] tmp; } } } } void print_arr(int arr[], int sz) { int i 0; for (i 0;i sz;i) { printf(%d , arr[i]); } printf(\n); } //冒泡排序 int main() { int arr[] { 9,8,7,6,5,4,3,2,1,0 }; //对数组进行排序——升序 int sz sizeof(arr) / sizeof(arr[0]); bubble_sort(arr,sz); //输出 print_arr(arr,sz); return 0; }代码运行结果