浅谈C++指针

ps:本人蒟蒻,如有错误请指正Orz

指针是什么

这个需要涉及到某些原理的问题:C++定义类型的时候,实际上是在内存中给你开辟了空间。比如你开了一个int类型,就会帮你开辟4字节的空间,你开了一个int数组a[x],就会为你开辟4*x字节的空间。但是开辟了空间之后,怎么修改呢?这时候就需要指针的存在,来指向空间。

指针的作用

有了指针,我们就可以知道空间所在的地址,好比你有了朋友的地址,可以前往了。有时,指针的存在可以加快程序的速度(比如你想在函数中调用一个数组,不用传上去,只需要知道该数组的地址,用指针即可,如何操作在下面讲解)。

指针的操作

1.指向数组

C++中,开了一个int数组a[x],实际上a就是一个指向a[0]的指针。用C++的地址符&表示,就是a==&a[0],而a+1就是a指向的地址往后推4个字节(a是一个int型的指针,所以+1的时候会往后推4个字节,如果a是long long型的指针,+1的时候就会往后推8个字节,以此类推),所以a+1==&a[1],又因为C++里*a表示a实际指向的内容(也就是说(*a)==a[0],这里没有地址符,是实际内容),所以(*(a+1))==a[1],这样就可以解释algorithm里sort的用法了:
sort(begin,end);
begin表示头指针,end表示尾指针,也就是从头指针到尾指针这一块区域排序。

所以,如果想把一个数组传进函数里,可以:
int XXXXX(int *a);
int *a就表示指向int的指针,在里面调用a[i]实际上就是*(a+i)。

2.指向结构体

你开了一个叫Node的结构体,那么你就可以开Node *a表示一个指向Node的结构体,想调用结构体内的内容怎么搞?(*a).XXXXX当然可以,但是C++提供了更方便(更形象?)的方法:a->XXXXX。

指针的妙用

有时你可能有两个只是拿来当成临时变量用的数组a和b(类型相同),某些时候需要对这两个数组进行交换,直接交换当然是可以的,不过我们可以用更快的方法达到同样的效果!先用两个指针指向a和b,然后交换指针,这样就不用交换所有元素了(当然实际上这两个数组内容没有交换)。

指针的好处&坏处

好处:常数小,因为直接修改内存。
坏处:难调试,很容易出现隐藏错误。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值