新闻中心 新闻
技术分享 | C语言指针从入门到放肆
新闻 2021-12-30 09:25:24

一、前言

相信很多学习C/C++编程都会“谈指针色变”。对于指针,是一种“指针虐我千百遍,我待指针如初恋”。因为一不小心,就会造成内存泄露,核心存储错误等BUG。今天本文就带大家走进指针。


二、什么是指针

指针(point),全称指针变量,简称为指针,是C/C++一个类型,其本质是一个变量,一个用来存放内存地址的变量。是一个复合类型。


 三、为什么使用指针

对于一个计算机程序,在存储数据的时候,需要考虑以下三个属性。

1.信息存储在什么地方(内存地址)?

2.存储的值是多少?

3.存储的是什么类型的信息?

为了解决上述的问题,就诞生了指针。


四、指针的基本用法

1.指针的声明、初始化以及赋值
C++是一个强类型语言并且严格区分初始化和赋值的概念。对于指针变量来说。声明指针的时候,必须要初始化,如果没有要指向的对象,可以指向nullptr。如下所示:
int x = 10; //初始化一个整形变量xint* ptr = &x; //初始化指针变量,并且指向xint* ptr2 = nullptr; //初始化指针变量,并且指向nullptr
从上面的代码可以看出,& 为取地址符号,目的是为了给指针变量赋值,int* 表示ptr为指针,且为一个int类型的指针。


2.指针的解引用
如果一个指针变量指向了一个对象,那么可以用解引用符号 * 来访问该对象存储的值。例如:
#include <iostream>int main() {  int x = 10;  int* ptr = &x;  std::cout << "*ptr = " << *ptr << std::endl;}

上述代码将会输出*ptr的值为10。


3.指针的加减
指针作为一个变量,可以对其进行加减操作,需要注意的是,指针的加减,移动的是地址的长度。例如:一个int类型的指针,如果我们对其进行+1操作,那么它将会移动4个字节。如下所示:
#include <iostream>int main() {  int x = 10;  int* ptr = &x;  std::cout << "ptr = " << ptr << std::endl;  std::cout << "ptr + 1 = " << ptr + 1 << std::endl;}
上述代码将会输出以下内容
ptr = 0x7ffd38e3b11c
ptr + 1 = 0x7ffd38e3b120
注意,并不是每一次运行结果都一样。


五、常量指针与指针常量

关于指针变量,请牢牢把握两个点:一个是指针变量指向的地址,而是指针变量指向地址中所保存的数据。

所谓指针指向的地址,只需要记住这一点,指针变量是用来保存变量地址的,而且是只能保存地址。所谓指针变量指向地址中保存的数据,即指向对象的值(注意是对象的值,而不是指针变量的值
记住上面这两个,接下来将进入指针中相对比较重要的部分了


1.const int* ptr
const int* ptr表示指针变量ptr指向的地址中保存的数据不能改变,即变量的值不能改变,相当于 const int x =3;即 *ptr不能改变。但是指针变量ptr指向的地址可改变。如代码第4行所示。
int x = 3;int y = 4;const int* ptr = &x;ptr = &y; //允许,可以指向不同的地址,但是不能修改地址中的值*ptr = 5; //不允许,限定 *ptr,保护地址中的数据
故,const int* ptr 限制的指针的第二点,即限制指针变量指向地址中保存的数据,不能改变

2.int* const ptr
int* const ptr 表示指针变量ptr指向的地址不能改变,即ptr的值不能改变,在下面这个例子中,指针变量只能指向x,不能指向y。但是指针变量指向地址中保存的数据可以改变,即*ptr可以改变,如代码第4行所示。
int x = 3;int y = 4;int* const ptr = &x;*ptr = 5; //允许,可以修改指针变量ptr指向地址中保存的数据ptr = &y; //不允许,限定指针变量ptr指向的地址。
故,int* const ptr限制的是指针的第一点,即指针变量指向的地址不能改变


 六、结语

学习 C++ 的指针既简单又有趣。通过指针,可以简化一些 C++ 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C++ 程序员,学习指针是很有必要的。


阿木实验室致力于为机器人研发提供开源软硬件工具和课程服务,让研发更高效!


公众号:阿木实验室 ( 领取免费资料包)

官方淘宝店:阿木实验室(可购买硬件配件)

硬件咨询:yanyue199506(欢迎洽谈合作)

课程咨询:jiayue199506 (免费领取机器人工程师学习计划)




- End -

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。    


您的浏览器版本过低,建议下载更换以下浏览器:

官方店铺

 阿木实验室

联系电话

028-87872048

扫一扫,快速加入

硬件评测

群号652692981

课程学习

群号652692981