指针
常用到一级指针和二级指针
对于初学C或者C++的同学一直容易弄混淆指针的概念。
首先要弄清楚
p=10,p1=&p,p2=&p1和p2,*p2,**p2
&a表示取这个整型变量的存储地址
*是取值,p是地址 ,*p表示p指向内存块中存储的值
p=10:p是整形变量
p1=&p:p1是指针整形变量p的一级指针变量
p2=&p1:p2是一级指针变量p1的二级指针变量
通过2个例子可以更新清楚的了解
程序一:
#include "iostream"
using namespace std;
void swap(int **p,int **q)
{
int *t;
t=*p;*p=*q;*q=t;
}
void main()
{
int a,b;
a=10;b=20;
int *p=&a,*q=&b;
cout<<"*p="<<*p<<" "<<"*q="<<*q<<'\n';
cout<<"**p="<<&p<<" "<<"**q="<<&q<<'\n';
swap(&p,&q);
cout<<"*p="<<*p<<" "<<"*q="<<*q<<'\n';</span>
}
程序一:
由于swap函数的两个形参被说明为int型二级指针变量,同时在调用时将以及int型指针变量的地址赋给它们,这样根据swap函数中的交换过程,swap函数调用结果时,实参p和q的地址也进行了交换,结果如图:
程序二:
由于swap函数中是直接利用二级指针p和q来交换实参a和b的值,因此在函数调用结束后,a和b的值进行了交换,由于p和q分别指向a和b,所以*p和*q的值也进行了交换
程序二:
#include "iostream"
using namespace std;
void swap(int **p,int **q)
{
int t;
t= **p;**p = **q;**q=t;
}
void main()
{
int a,b;
a=10;b=20;
int *p=&a,*q=&b;
cout<<"p="<<p<<" "<<"q="<<q<<'\n';
cout<<"*p="<<*p<<" "<<"*q="<<*q<<'\n';
cout<<"**p="<<&p<<" "<<"**q="<<&q<<'\n';
swap(&p,&q);
cout<<"*p="<<*p<<" "<<"*q="<<*q<<'\n';
cout<<"a="<<*p<<" "<<"b="<<*q<<'\n';
}
指针加加
*P++: 1.取出P所指的那个数据来,完事之后顺便把P移到下一个位置去;
2.常用于数组类的连续控件操作。
指针的类型转换
int *p =&i;
void *q = (void*)p;
● void* 表示不知道指向什么东西的指针;
●这并没有改变p所指的变量的类型,而是让后人用不同的眼光通过q看它所指的变量,不当你是int,而认为你是个void.
用指针来做什么
1.需要传入较大的数据时用作参数。(array)
2.传入数组后对数组进行操作。
3.函数返回不止一个结果。(max , min)
4.需要用函数来修改不止一个变量。(swap)
5.动态申请的内存...