1.交换两数
int a=2,b=3;
int temp=a;a=b;b=a;
函数包装
指针
#include <stdio.h>
#include<string.h>
//#include <iostream>
//using namespace std;
void swap(int* a,int* b)
{
int temp=*a;
*a=*b;//修改a指针指向的地址的对应的变量的值,地址不变
*b=temp;
}
int main()
{
int a1=3,a2=4;
int* p1=&a1;int* p2=&a2;
swap(p1,p2);
printf("%d %d",a1,a2);
}
输出:4 3
指针的值=地址
取地址=&变量
取该地址上变量的值=*p=*&变量
必须是改变地址上的值,不是改变地址
如果是改变地址:
#include <stdio.h>
#include<string.h>
//#include <iostream>
//using namespace std;
void swap(int* a,int* b)
{
int *temp=a;
a=b;
b=temp;
}
int main()
{
int a1=3,a2=4;
int* p1=&a1;int* p2=&a2;
swap(p1,p2);
printf("%d %d",a1,a2);
}
输出仍为:3 4
引用(更方便)
#include <stdio.h>
#include<string.h>
//#include <iostream>
//using namespace std;
void swap(int& a,int& b)
{
int temp=a;
a=b;
b=temp;
}
int main()
{
int a1=3,a2=4;
// int* p1=&a1;int* p2=&a2;
swap(a1,a2);
printf("%d %d",a1,a2);
}
输出:4 3
指针的引用
给指针加上引用,交换两个指针
#include <stdio.h>
#include<string.h>
#include<typeinfo>
//#include <iostream>
//using namespace std;
void swap(int* &p1,int* &p2)
{
//对指针的swap
int* temp=p1;
p1=p2;
p2=temp;
}
int main()
{
int a1=3,a2=4;
int* p1=&a1;int* p2=&a2;
swap(p1,p2);
printf("%d %d ",a1,a2);
printf("%d %d ",*p1,*p2);
}
输出:
但是不能这样:
#include <stdio.h>
#include<string.h>
#include<typeinfo>
//#include <iostream>
//using namespace std;
void swap(int* &p1,int* &p2)
{
//对指针的swap
int* temp=p1;
*p1=*p2;
*p2=*temp;
}
int main()
{
int a1=3,a2=4;
int* p1=&a1;int* p2=&a2;
swap(p1,p2);
printf("%d %d ",a1,a2);
printf("%d %d ",*p1,*p2);
}
这个输出:4 4 4 4
因为temp和p1同为指针,指向同一地址,*p1赋值为*p2时,*temp对应地址的值也是*p2
2.冒泡排序
第一次冒泡,交换n-1次
第二次冒泡,交换n-2次
……
第n-1次冒泡,交换1次
n-1+(n-2)+……+1=总次数
标签:p2,p1,int,c++,a1,算法,a2,简单,include From: https://blog.csdn.net/m0_68339197/article/details/139042873