【c++学习笔记】指针

地址操作符&:
&变量名:表示取该变量的地址。

指针用于存储值的地址
*操作符用于取指针对应地址处的值

如 i表示指针,则*i表示i处存储的值。

指针声明必须指定指针指向的数据的类型。
int* p1,p2;将创建一个指针和一个int变量p2。

在c++中使用指针时,在对指针使用 * 操作符之前,应当将指针初始化为一个确定的、适当的地址。

int* pr;
pr=0xB8000000;这种复制方式是不对的,因为0xB8000000是一个整数值,而pr是一个指针,它并不是int类型的,它指向的数据是int型的。
要将数字值作为地址来使用,需要通过强制类型转换将数字转换为适当的地址类型。
如:int* pr;
pr=(int*)0xB8000000;
即将pr认为是 复合类型int*,将0xB8000000强制转换为int*型。

使用new来分配内存
在定义了一个指针之后,如int* pn;要告诉计算机这个指针指向何处,则需要给这个指针一个地址,方法一:把一个已知变量的地址赋给这个指针,如pn=&name,其中name是一个已定义的变量。方法二:使用new来分配一个内存块,将这个内存块的地址返回给指针,这样就可以使用指针来访问这个内存块了。
使用new来分配内存的方法:
typename pointer_name=new typename;
如int* pn=new int;
即表示分配了一个int型的内存块,并将它的地址给了指针pn。
若之前已经定义过指针,则可直接new,如int* pn;pn=new int;
若计算机没有足够的内存,则无法满足new的请求,则会返回0,则这样的指针被称为空指针,空指针不会指向任何有用的数据。

使用delete来释放内存
如delete pn;表示释放了之前分配给指针pn的内存空间,但是并没有删除指针,仍然可以给这个指针分配新的内存空间。new和delete一定要配对使用,不然会发生内存泄漏。
不能使用delete来释放通过声明变量所获得的内存。

使用new来创建动态数组
通常,对于小型数据,直接声明简单变量会比使用new和指针更方便。
通常对于大型数据,如数组、字符串使用new。如果在一个程序中,通过声明创建了数组,那么在编译时,将会给它分配内存空间(在编译时给数组分配内存称为静态联编);若使用new,则在运行阶段,若需要使用数组,则创建,若不需要,则不创建,还可以在程序运行时选择数组的长度,这种数组称为动态数组,数组是在程序运行时创建,这称为动态联编


使用new来创建数组,使用指针来访问数组元素。


创建:类型名* 指针名=new 类型名[num];
如:int* pn=new int[10];
new操作符返回第一个元素的地址,程序不需要使用这个数组时,应当将内存释放,
格式为:delete [] 指针名;
如:delete [] pn;
[]表明需要释放整个数组。

使用:只需将指针当作数组名来使用,即可获取数组中的数据。
如要访问第一个元素,则为 指针名[0];如:pn[0];
如要访问第二个元素,则为 指针名[1];如:pn[1];
以此类推。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值