回首指针


指针

常用到一级指针和二级指针

对于初学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.动态申请的内存...


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值