【未完成】简单明了的理解c++指针

指针的由来

首先我们要知道,一个内存单元由地址和内容两部分组成。

                

     

如上图,例如我们定义了一个变量a.

通过取地址运算符&(他的作用是求一个变量的地址),我们知道变量a的地址为0x6ffe1c,内容为5。

我们在访问变量a时,通常是直接访问,例如将a的值改为10,则直接执行a=10;

但是除了直接访问以外,我们可以用一种间接访问的方式来修改a的值。我们再另外定义一个变量p,专门用来存放a的地址,p的存放内容就是a的地址,当然p本身也有一个地址&p。然后我们再使用间接寻址运算符 *p(他的作用是返回操作数所指定地址的变量的值)来访问a的值,执行*p=10,也可以达到修改的目的。

我们这种用地址的方式来间接访问一个变量,用画图的形式来表示的话,一般用一个箭头从那个存放地址的变量指向这个真正要访问的变量【如图二的红色箭头】,因此指针由此生动的产生。一个变量的地址就是该变量的指针。

这些专门用来存放地址的变量具有一定的特殊性了,所以我们给他们一个新的名称:指针变量

总结:

指针就是一个变量的地址,因为地址会指向这个变量,所以称其为指针。

指针变量是一个变量,专门用来存放变量的地址。

 

指针的定义

形式:基础变量类型 * 指针变量名;

例如上图的指针定义, int *p; 说明p是一个指针,并且指向整型类型,要达到访问a的目的,还需要进行赋值连接,即 p=&a;

也可以在定义是直接初始化:  int *p=&a;

 

用指针作函数参数

1.函数的参数可以是整型、实型、字符型等等,也可以是指针类型。

2.这种地址传递(也叫指针传递)的方式可以实现通过调用函数使变量的值发生变化,并且在主调函数中使用这些改变了的值。

经典例题:交换两个数字

#include<iostream> 
using namespace std;

void swap(int *a,int *b){
	int t=*a;
	*a=*b;
	*b=t;
}

int main(){	
	int x=5,y=6;
	swap(&x,&y);
	cout<<x<<" "<<y<<endl;
} 

实参传入的是变量x,y的地址,形参的类型也是指针类型,他们接收了这个地址,现在指针变量a指向x,b指向y。

我们又定义了变量t,来交换*a和*b,也就是交换了x和y的值,实现了swap功能。

关于swap功能的实现还有很多种交换方式是不正确的,也是经典的例题。

C++实现swap功能的常见几种错误【值传递、地址传递】

 

数组指针指针数组

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值