指针变量
指针变量的定义、赋值
初始化int a;int *p=&a;
赋值int *pp``=&a
p 与 a等价 p与&a等价 p=3与a=3等价
#include<cstdio>#include<iostream>using namespace std;int main(){int a,b,s,t,*pa,*pb;pa=&a;pb=&b;a=10;b=20;s=*pa+*pb;t=*pa**pb;cout<<*pa<<*pb<<endl;cout<<s<<t<<endl;return 0;}
指针的引用与运算
初始化
int *p=NULLint a;int *p=&a;int *p=new(int);
指针变量要保证先初始化或者赋值给予正确地址后再使用
避免bug
指针变量的加减运算
#include<cstdio>using namespace std;int a[101],n;int main(){scanf("%d",&n);for(int i=1;1<=n;i++)scanf("%d",&a[i]);int *p=&a[1];for(int i=1;i<=n;i++){printf("%d",*p)p++;}return 0;}
输入42 1 6 0
输出2 1 6 0
P++的意思是地址到达下一个引索
无类型指针
void *p;
可以根据需要用强制类型转化的方法明确其类型
如:*(int *)p
多重指针
指针与数组
设数组a,指向a的指针变量为pa,则有以下关系pa,a,&a[0]均指向数组a的首地址,即元素0;pa+i,a+i,&a[i]指向数组a的元素i;
使用指针访问数组
#include<cstdio>using namespace std;int main(){int a[5],i,*pa=a;for(i=0;i<5;i++)scanf("%d",a+i);for(i=0;i<5;i++)printf("%d",*(a+i))return 0;}
输入1 2 3 4 5
输出12345
