[学习笔记]C和C++中指针的基础知识点(一)

       大晚上的,屋里热的让人不想睡觉,就发篇今天在下从《C++ Primer Plus》这本宝书中总结的一些关于指针的基础知识吧。这部分知识点比较多,并且涉及的面比较广,所以没总结完, 这两天抽空总结完了我就陆续po上来。

       指针这部分学过C都知道,相对容易让人头大 ,尤其是基础并不那么牢固的同学;这部分是C语言中比较容易让人产生说WTF的。指针用途很广泛,从数组,字符串到结构体,函数,类等等,都离不开它的身影,所以对这部分的基础概念的掌握就显得必要性十足了。

       最基本的,一定要记住,指针是一个变量,其存储的是值的地址,而不是值本身。

       只需对变量应用地址运算符(&),就可以获得其地址。指针名表示的是地址,*运算符被称为间接值或解除引用运算符。如:

int * pointer;
int cash = 10;
pointer = &cash;

       int变量cash和指针变量pointer只不过是同一枚硬币的的两面。变量cash表示值,用&运算符来获得其地址;而变量pointer表示地址,*pointer表示其值。我们说pointer的类型是指向int的指针,或int*。即pointer是指针(地址),而*pointer是int。


指针的危险:


       在C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。如:

long * ptr;
*ptr = 250;

       由于ptr没有被初始化,他可能是任何值,不管制是什么,程序都将250赋予这个值的地址。所以在对指针应用解除引用运算符之前,一定要将其初始化为一个确定的、适当的地址。


使用new分配内存:


       在运行阶段为一个int值分配未命名的内存,并使用指针来访问这个值。new将找到一个长度正确的内存块,并返回该内存块的地址。如:

int *pn = new int;

       new运算符根据类型来确定需要多少字节的内存。然后,它找到这样的内存,并返回其地址。接下来将地址赋给pn。

       使用new为一个数据对象获得并指定分配内存的通用格式为:

typeName * pointer_name = new typeName;


使用delete来释放内存:


delete用法如下:

int *pn = new int;
…
delete pn;

       这将释放pn指向的内存,但不会删除指针pn本身。记住,一定要配对使用new和delete,否则将发生内存泄露。

也不要尝试释放已经释放的内存块,这样做结果将是不确定的。还不能使用delete来释放声明变量所获得的内存;

只能用delete来释放使用new分配的内存,除了空指针。


使用new创建动态数组:


       通常,对于大型数据,应使用new,这正是其用武之地。

int *ptr = new int [10];

       new运算符返回第一个元素的地址。当使用完new分配的内存块时,应使用delete释放他们。

delete [] ptr;

       方括号告诉程序,应释放整个数组,而不仅仅是指针指向的元素。

       总之,new对应的delete,new[]对应的delete[]。

       对于很方便的sizeof运算符,不能将它用于确定动态分配的数组以确定其包含的字节数

       动态数组的使用方式很简单,只要将指针当做数组名来使用即可,也就是说ptr[0]是我们用new创建的动态数组的第一个元素,ptr[1]则是第二个元素,数组和指针基本等价是C++的优点之一。

       很有意思的一点是,ptr+1指向的是数组的下一个元素的地址,而不是指向第一个元素的地址加上1,很棒吧,这表明指针算数有一些特别的地方。


       今天先说这么多,还没睡的伙计们,赶紧去睡吧,还不准备睡的话,想想自己的头发吐舌头。古耐!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值