C/C++指针极简入门

1、 初识指针及使用指针
       简单来说,指针是一种特殊的变量。特殊在于,这种变量存储的不是普通值(比如1,2,100,‘q’);它存储的是内存地址,比如0x101、0x886等。

       我们都知道,变量的存储是需要占用内存空间的。
       图中,Age是一个变量,它的存放地址是0x886,存放的值是18。
       pAge是一个指针,也可以说是一个特殊的变量。它的存放地址是0x601,存放的内容是0x886。对比,很容易发现,指针和变量有很多相似之处;不同之处在于,指针存放的是内存地址。
 (1.1) 声明指针
       指针作为一种特殊变量,也是需要声明的。我们如下声明一个int类型变量:
       int Age; //声明一个变量Age
      同理,在声明指针时,也需要指明类型。而该类型(比如int)对应的是该指针指向内存单元中存储的数据的类型
       int *pAge; //声明一个指针变量

       在声明变量时,我们一般会将变量初始化为0。同样,在声明指针时,我们也不希望它指向随机的内存单元。因此会将指针初始化为NULL。初始化为NULL的指针被称为NULL指针或空指针,空指针(即pAge)是一个定义在标准库中的值为零的常量。

(2) 使用 & 获取变量地址
     & 被称为引用运算符。如果Age表示一个变量,&Age将是存储该变量的内存地址。

#include<iostream>
using namespace std;
int main()
{
	int Age=18;
	cout<<"变量Age存放在内存中的地址是:"<<hex<<&Age<<endl;
	return 0;
}

(3) 使用指针存储地址
       我们知道了指针是用于存储内存地址的变量,也知道了如何声明指针以及获取变量的地址。现在就可以将它们关联起来,使用指针来存储 & 获取的地址。 

#include<iostream>
using namespace std;
int main()
{
	int Age = 18;
	cout<<"变量Age存放在内存中的地址是:"<<hex<<&Age<<endl;
	int *pAge = &Age;
	cout<<"指针pAge中存放的地址是:"<<hex<<pAge<<endl;
	return 0;
}

(4) 使用 * 访问指向的数据
       符号 * 也被称为解除引用运算符。通常,只要是合法的指针pAge,我们就可以通过 *pAge 访问指针pAge包含的地址处存储的值。(注意是访问地址所对应的值,而不是地址)  2、使用指针时的常见错误
(1) 内存泄漏
        如果在使用new动态分配的内存不再需要后,开发者没有及时使用delete释放内存的话,这些内存就会被预留并分配给你的应用程序。这将减少可供其他应用程序使用的系统内存量,甚至会降低应用程序的执行速度,这就是所说的内存泄漏。
------忘记对已经请求分配的内存进行delete,很容易造成内存泄漏,我们在使用new请求分配动态内存时,一定要注意这个。

(2) 无效指针
       使用运算符 * 对指针解除引用,以访问指向的值时。务必确保该指针指向了有效的内存单元,否则程序很可能崩溃。导致指针无效的原因很多,但都要归结于糟糕的内存管理。这里仅介绍两种常见的引起指针无效的情形:
①声明指针过程中,没有将其初始化为NULL,并且在后面也没有对指针赋以有效的地址。
②使用new为指针申请动态内存时,当内存需要量特别大时,可能分配不成功,导致无效指针。如下:

int* pNums = new int[10000000000]; //申请的内存量太大,可能导致分配不成功

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值