指针变量

指针变量的定义、赋值

初始化
int a;
int *p=&a;
赋值
int *p
p``=&a

p 与 a等价 p与&a等价 p=3与a=3等价

  1. #include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. int main()
  5. {
  6. int a,b,s,t,*pa,*pb;
  7. pa=&a;
  8. pb=&b;
  9. a=10;
  10. b=20;
  11. s=*pa+*pb;
  12. t=*pa**pb;
  13. cout<<*pa<<*pb<<endl;
  14. cout<<s<<t<<endl;
  15. return 0;
  16. }

指针的引用与运算

初始化
  • int *p=NULL
  • int a; int *p=&a;
  • int *p=new(int);

指针变量要保证先初始化或者赋值给予正确地址后再使用

避免bug

指针变量的加减运算
  1. #include<cstdio>
  2. using namespace std;
  3. int a[101],n;
  4. int main()
  5. {
  6. scanf("%d",&n);
  7. for(int i=1;1<=n;i++)
  8. scanf("%d",&a[i]);
  9. int *p=&a[1];
  10. for(int i=1;i<=n;i++)
  11. {
  12. printf("%d",*p)
  13. p++;
  14. }
  15. return 0;
  16. }

输入
4
2 1 6 0
输出
2 1 6 0

P++的意思是地址到达下一个引索

无类型指针

void *p;
可以根据需要用强制类型转化的方法明确其类型
如:
*(int *)p

多重指针

c++允许多重递归地指针指向指针

指针与数组

设数组a,指向a的指针变量为pa,则有以下关系pa,a,&a[0]均指向数组a的首地址,即元素0;pa+i,a+i,&a[i]指向数组a的元素i;
使用指针访问数组

  1. #include<cstdio>
  2. using namespace std;
  3. int main()
  4. {
  5. int a[5],i,*pa=a;
  6. for(i=0;i<5;i++)
  7. scanf("%d",a+i);
  8. for(i=0;i<5;i++)
  9. printf("%d",*(a+i))
  10. return 0;
  11. }

输入
1 2 3 4 5
输出
12345