指针变量
指针变量的定义、赋值
初始化int a;
int *p=&a;
赋值int *p
p``=&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=NULL
int 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;
}
输入4
2 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