【C/C++】 常量指针,指针常量、指向常量的常指针详解

这篇具有很好参考价值的文章主要介绍了【C/C++】 常量指针,指针常量、指向常量的常指针详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是指针

指针就是指向变量在内存中的地址

数据是存放在内存中的,每一个变量都有一个内存地址,假设是一个int类型变量a,占4个字节的内存区,那么在内存中如果是小端方式存储,我们创建指针p,把a的地址赋值给p,就是把a的首地址0x1100赋值给指针p,这个时候p的值就是变量a在内存中的首地址

int a =10;
int*p;
p=&a; //把a的首地址赋值给P

也就是说指针的值是这块内存区域的首地址

常量指针,c语言学习,c++,c语言,数据结构,指针常量,常量指针

内存地址

内存是一个很大的,线性的字节数组,每一个字节都是固定8个二进制位组成,计算机对每个内存单元都进行了编号,这个编号就称为内存地址,地址决定了内存单元在内存中的位置

指针所占内存

32位系统中,处理器一次能处理的最大位数是2的32次方 ,也就是一次处理4个字节的内存数据,哪么指针的长度也就是4个字节

64位系统中,处理器一次能处理的最大位数是2的64次方 ,也就是一次处理8个字节的内存数据,哪么指针的长度也就是8个字节

32位系统指针4个字节 64位系统8个字节

const 变量

const 是 constant 的缩写,本意是不变的,不易改变的意思

也就是说使用const修饰的变量,其值是不允许改变的

const int  a = 7; 
int  b = a; // 正确
a = 8;       // 错误,不能改变

指针常量,常量指针和指向常量的指针

在了解了上面的基础知识之后,我们来看一下什么是指针常量,常量指针和指向常量的指针

首先说一下怎么快速的记住他们的区别,只需要按照命名的顺序来读,就可以很好地记忆

比方说:

int * const p =&a;

首先是一个指针int * , 然后一个const常量 那么p就是指针常量

const int *p=&a;

首先是一个const常量, 然后一个指针int * 那么p就是常量指针

是不是很好记忆

指针常量

int * const p =&a;

特点:指针的指向不可以修改,指针指向的内存的值可以修改

因为const的功能就是限定不可以修改,所以我们看到指针常量是先有了int *指针,再有的const修饰p 所以p的值(指向的内存地址) 是不可以修改的

也就是const限制的是指针p的值,但是没有限定p指向的内存地址里的数据,所以内存的数据可以修改

举例:

int a=10;
int * const p =&a;  //定义指针常量,指向int a的地址

*p = 20; //正确,指向的内存地址中的数据可以修改   
 
p=&b;  //错误,指向的内存地址不可以修改

箭头是指针指向的内存值,是不可以修改的,但是指向的内存地址中的数据可以修改
常量指针,c语言学习,c++,c语言,数据结构,指针常量,常量指针

常量指针

const int *p=&a;

特点: 指针的指向可以修改,但是指针指向的值不可以修改。

常量指针,首先要是常量。就是指向的值要是一个常量,但是指向的内存地址不做限制

int a=10;
int b=10;
const int *p=&a;  //定义常量指针,指向int a的地址

*p = 20; //错误,指向的内存地址中的数据不可以修改   
 
p=&b;  //正确,指向的内存地址可以修改

箭头是指针指向的内存值,是可以修改的,但是指向的内存地址中的数据要和之前的一致
常量指针,c语言学习,c++,c语言,数据结构,指针常量,常量指针

指向常量的常指针

const int const *p=&a;

特点: 指针的指向不可以修改,指针指向的值也不可以修改。

两个const限制,一旦指向之后就不可以做修改了

int a=10;
int b=10;

const int const *p=&a;  //定义指针常量,指向int a的地址

*p = 20; //错误,指向的内存地址中的数据不可以修改   
 p=&b;  //错误,指向的内存地址不可以修改

常量指针,c语言学习,c++,c语言,数据结构,指针常量,常量指针

空指针、野指针

空指针就是指向地址为空的指针

注意:空指针指向的内存是不可以访问的

//-------空指针-------//
int *p4 = NULL;
//cout << *p4 << endl; //运行Error,使用指针时必须先判断是否空指针

野指针是指针指向了一个随意的内存地址,如果使用,会造成不可预知的内存错误

//-------野指针(悬浮、迷途指针)-------//

int *p5 =0x1100;  //任意赋值的野指针
//cout << *p5 << endl; //运行Error

int *p6 = new int(5);
delete p6;  //删除p6的指向
p6 = NULL; //一定要有这一步,否则p6会随机的指向一个地址


常量指针,c语言学习,c++,c语言,数据结构,指针常量,常量指针
常量指针,c语言学习,c++,c语言,数据结构,指针常量,常量指针文章来源地址https://www.toymoban.com/news/detail-635052.html

到了这里,关于【C/C++】 常量指针,指针常量、指向常量的常指针详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言学习(二十五)---指针练习题(一)

    在上一节内容中,我们学习了 递归 与 冒泡排序法 的有关内容,今天我们将继续往下学习,主要内容为 指针练习题 ,好了,话不多说,开整!!! 在之前的第18—22的内容中,我们学习了 指针 的一系列内容,今天我们对之前的 指针内容进行测试 ,在查看答案之前,请先自

    2024年02月10日
    浏览(30)
  • C语言指针入门学习、知识点梳理(四)

    本篇内容:指针星号的三种含义以及指针在函数调用时,与实参、形参的变量传递关系,如何通过被调函数修改主调函数普通变量的值。 传送门: C语言指针入门学习、概念梳理(一) C语言指针入门学习、概念梳理(二) C语言指针入门学习、知识点梳理(三) C语言指针入门

    2024年02月09日
    浏览(31)
  • C语言-指针进阶-qsort函数的学习与模拟实现(9.3)

    目录 思维导图: 回调函数 qsort函数介绍 模拟实现qsort 写在最后: 什么是回调函数? 回调函数是一个通过函数指针调用的函数。 将一个函数指针作为参数传递给一个函数,当这个指针被用来调用所指向函数时, 我们就将此称为回调函数。 在举例之前,我们先学习一个C语言

    2024年02月15日
    浏览(43)
  • C语言:指向数组的指针和指向数组首元素的指针

    相关阅读 C语言 https://blog.csdn.net/weixin_45791458/category_12423166.html?spm=1001.2014.3001.5482         指向数组的指针和指向数组首元素的指针常常被混淆,或者笼统地被称为数组指针,但它们之间是有差别的,本文就将对此进行讨论。         下面的代码首先创建了一个数组,然后创

    2024年02月02日
    浏览(40)
  • C/C++|物联网开发入门+项目实战|指针|嵌入式C语言高级|C语言内存空间的使用-学习笔记(9)

    参考: 麦子学院-嵌入式C语言高级-内存空间 内存类型资源地址、门牌号的代名词 指针:地址的代名词 指针变量:存放指针这个概念的盒子 *P char *p *p; C语言娟译器对指针这个特殊的概念,有2个疑问? 1、分配一个盒子,盒子要多大? 在32bit系统中,指针就4个字节 2、盘子里存放

    2023年04月22日
    浏览(42)
  • C语言指针操作(六)指向函数的指针

    指向函数的指针详解,以及如何使用指向函数的指针变量做函数参数 指向函数的指针作为函数参数,是 C 语言实际应用中的一个比较深入的部分。 目录 一、什么是函数的指针 二、用函数指着变量调用函数 2.1举例说明 三、怎样定义和使用指向函数的指针变量 3.1定义指向函数

    2024年02月05日
    浏览(39)
  • c语言中指针常量和常量指针

    指针常量(Pointer to Constant)和常量指针(Constant Pointer)是C和C++中用于描述指针和常量的组合概念。 指针常量本质是一个常量,它的值不能改变,即指针始终指向同一个地址。但通过指针可以修改所指向对象的值。 int* const ptr;//表示ptr是一个指针常量,指向一个整型常量对

    2024年02月10日
    浏览(27)
  • 8.5 【C语言】指向函数的指针

    每次调用函数时都从该地址入口开始执行此段函数代码。函数名代表函数的起始地址。 例8.22 用函数求整数a和b中的大者 解题思路:在主函数调用max函数,除了可以通过函数名调用外,还可以通过指向函数的指针变量来实现。 (2)通过指针变量调用它所指向的函数 类型名(

    2024年02月11日
    浏览(21)
  • c语言学习详解

    C语言是一种用于和计算机交流的高级语言, 它既具有高级语言的特点,又具有汇编语言的特点 非常接近自然语言 程序的执行效率非常高 C语言是所有编程语言中的经典,很多高级语言都是从C语言中衍生出来的, 例如:C++、C#、Object-C、Java、Go等等 C语言是所有编程语言中的经典

    2024年02月14日
    浏览(33)
  • 8.8 【C语言】动态内存分配与指向它的指针变量

    栈:全局变量和局部变量,全局变量是分配在内存中的静态存储区的,非静态的局部变量是分配在内存中的动态存储区的。 堆:数据临时存放在一个特别的自由存储区。 对内存的动态分配是通过系统提供的库函数来实现的,主要有malloc,calloc,free,realloc这四个函数。 1.用mallo

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包