很多初学者在学习c语言函数调用那块就会对值传递,参数传递不理解下面我通过一个实际案例向大家展示效果
//简单选择排序
#include<stdio.h>
void maopao(int a[],int n);
void BL(int a[],int n);
//void swap(int* A,int* B);
void swap(int A,int B);
void xuanze(int a[], int n);
int main(){
int a[] = {1,2,3,6,7,4};
xuanze(a,6);//调用选择排序
BL(a,6);//遍历数组
return 0;
}
void xuanze(int a[], int n){
for(int i=0 ; i<n; i++){
int min = i;
for(int j=i+1; j<n; j++){
if(a[j]<a[min]){
min = j;
}
}
// swap(&a[i],&a[min]);//传入两个int*指针也就是两个待交换数的地址
swap(a[i],a[min]);//传入两个int类型的数
}
}
void maopao(int a[],int n){
for(int i=0; i<n; i++){
int flag = false;
for(int j=n-1; j>i; j--){
if(a[j-1]>a[j]){
int temp = a[j-1];
a[j-1]=a[j];
a[j] = temp;
flag = true;
}
}
if(flag == false){
printf("i = %d\n",i);
return;
}
}
}
//这是值传递
void swap(int A,int B){
int temp = A;
A =B;
B = temp;
}
//这是通过参数传递写出来的
//void swap(int* A,int* B){
// int temp = *A;
// *A = *B;
// *B = temp;
//}
void BL(int a[],int n){
for(int p=0; p<n; p++){
printf("%d\n",a[p]);
}
}
这是上面代码运行出来的效果
发现跟原来的顺序一摸一样
然后我再使用地址传递的效果
//简单选择排序
#include<stdio.h>
void maopao(int a[],int n);
void BL(int a[],int n);
void swap(int* A,int* B);
void xuanze(int a[], int n);
int main(){
int a[] = {1,2,3,6,7,4};
xuanze(a,6);
BL(a,6);
return 0;
}
void xuanze(int a[], int n){
for(int i=0 ; i<n; i++){
int min = i;
for(int j=i+1; j<n; j++){
if(a[j]<a[min]){
min = j;
}
}
swap(&a[i],&a[min]);
}
}
void maopao(int a[],int n){
for(int i=0; i<n; i++){
int flag = false;
for(int j=n-1; j>i; j--){
if(a[j-1]>a[j]){
int temp = a[j-1];
a[j-1]=a[j];
a[j] = temp;
flag = true;
}
}
if(flag == false){
printf("i = %d\n",i);
return;
}
}
}
void swap(int* A,int* B){
int temp = *A;
*A = *B;
*B = temp;
}
void BL(int a[],int n){
for(int p=0; p<n; p++){
printf("%d\n",a[p]);
}
}
发现已经排好顺序了。
有不懂的欢迎大家与我交流,在线互动!