指针对于两个函数的数据交换是很重要的
将指针赋为0
int *p,a=0;
p=a;//错误
p=123;//错误
p=null;//正确
p=0;//正确
指针操作
int *p,a;
double b;
p=&a;//正确
p=&b;//错误
int *q=p;//正确
const *w;
*w=&a;//正确
*w=15;//错误 ,w是不能被修改的
//一维数组与指针
int *p,a[10];
p=a;//正确,指针指向的是数组第一个元素的地址
//*(a+i)就相当于a[i]
for(p=a;p<a+10;p++) cin>>*p;
//相当于 for(int i=0;i<10;i++) cin>>a[i];
指针可以实现跨函数操作数,比如在通过函数实现两个数交换两个数值时,此时可定义为全局变量,也可以通过指针来实现这个功能
#include<iostream>
using namespace std;
void change(int *p,int *q){
int t;
t=*p;
*p=*q;
*q=t;//函数为空函数,那么就无返回值
//因此如果不用指针或全局变量,那么就对a,b的值无影响,也无法达到交换数值的目的
}
int main(){
int a,b;
cin>>a>>b;
change(&a,&b);
cout<<a<<b<<endl;//此时a,b的值已经交换了
return 0;
}
指针做参数
//形参为指针
void f(int *a,int n){
}
int main()
{
int b[10];
f(&b,10);
}
//形参实参都为指针
void f(int *a,int n){
}
int main()
{
int b[10],*p;
p=b;
f(p,10);
}
//实参为指针
void f(int a[10],int n){
}
int main()
{
int b[10],*p;
p=b;
f(p,10);
}
指向函数的指针:
格式:数据类型 (*函数名)(形参列表)
作用:可以指向同类型都函数
#include<iostream>
using namespace std;
int f(int a,int b,int(*c) (int x,int y) ){//c作为指向函数的指针
return c(a,b)*c(a,b);
}
int max(int q,int p){
return p>q?p:q;
}
int min(int w,int r){
return w<r?w:r;
}
int main()
{
int t,u;
cin>>t>>u;
cout<<f(t,u,max)<<endl<<f(t,u,min)<<endl;//利用指向函数的指针调用不同的函数
//就相当于第一次调用的是f和max函数 ,第二次调用f和min函数
return 0;
}