指针变量、指针常量与常量指针的区别

指针变量、指针常量与常量指针

一、指针变量

定义:指针变量是指存放地址的变量,其值是地址。
一般格式:基类型 指针变量名;(int p)
关键点
1、int * 表示一种指针类型(此处指int 类型),p(变量名)即为定义的指针变量名。
2、在定义指针变量时必须指定基本类型,知道数据类型,才能按存储单元的长度以及数据的存储形式正确地取出数据
3、指针变量中只能存放合法的地址类型,不要将其他类型数据赋给指针变量
4、“
* ”指针运算符,表示指针变量所指向的变量,“
& ”取地址运算符,表示取变量的地址
5、引用指针变量主要有以下三种情况

int date = 0;	//定义变量
int *Pointer;   //定义指针变量//1、给指针变量赋值
Pointer = &date;//把date 的地址赋给指针变量pointer,指针变量pointer的值时变量date 的地址,pointer指向date //2、引用指针变量指向的变量
printf("%d",*pointer);  //输出指针变量pointer所指向变量的值,即变量date的值(*pointer等价于date)
*pointer = 1; //将整数1赋值给指针变量pointer所指向的变量的值,即相当于把1赋值给date ,等价于“date = 1”//3、引用指针变量的值
printf("%p",pointer);//以八进制数形式输出指针变量pointer的值,即date 的地址(&date )

注意事项
1、指针变量作为一种变量类型,可以作为数组成员(指针数组)、函数参数、和函数返回值(指针函数),甚至可以作为保存数组地址(数组指针)或函数地址的变量(指针函数)。
2、指针变量可进行以下几种运算操作:

二、指针常量

定义:是一个常量,其值是指针,这个值因为是常量,所以不能被赋值。

个人理解就是把他看成一个地址格式的常量数据,比如在32位机器上有一个地址格式的常量数据:0x0000FFF1,首先它是作为一个常量存在,我们没办法改变它的数据值,其次它作为一个地址,它有指向固定的内存空间;因为没法改变他的值(0x0000FFF1),那么它指向的这块空间位置就固定了,但这个内存空间里放的东西可以改变。
一般格式:int* const p
关键点
1.它是个常量!
2.指针所保存的地址可以改变,然而指针所指向的值却不可以改变
3.指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化;

注意事项:数组名也是一个指针常量,所以数组名可以作运算,但常量不能作为左值被赋值,(不能arr += 1,但可以arr++)。char str[4];str = “abc”;这种赋值方式也不行的。

int*  const p1 = &a;
a = 100;     //OK,可以通过原来的声明修改值,
*p1 = 10;   //OK,指针常量指向的地址不可以变,但指向的地址所对应的内容可以变
//p1 = &b;   //Error,不可修改,即指针常量不可修改其指向的地址

三、常量指针

定义:又叫常指针,可以理解为常量的指针,也即这个是指针,但指向的是个常量,这个常量是指针的值(地址),而不是地址指向的值。

个人理解就是有一个指针变量,这个变量可以指向不同的内存空间,但是这个内存空间必须有个条件就是里面存在的数据是个常量不能改变,(之所以所是指针变量参见以下关键点)

一般格式: int const* p; const int* p;
关键点
1.常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改;
2.常量指针可以被赋值为变量的地址,之所以叫常量指针,是限制了通过这个指针修改变量的值;
3.指针还可以指向别处,因为指针本身只是个变量,可以指向任意地址;

const int *p1 = &a;
a = 100;     //OK,仍然可以通过原来的声明修改值,
//*p1 = 50;  //Error,不可修改,即常量指针指向的地址所对应的内容不可变
p1 = &b;     //OK,可修改,即常量指针可修改其指向的地址;

注意事项

四、区分方式

指针变量最好区分,没什么特点,难以区分的是指针常量和常量指针:

int  const* p;   //常量指针,const修饰*p,*p的内容不可通过p改变,但p可以修改,*p不可修改
const int* p;    //常量指针,const修饰*p,*p的内容不可通过p改变,但p可以修改,*p不可修改
int* const p;    //指针常量,const修饰p,p是指针,p指向的地址不能改,p不能修改,*p可修改

根据*在const前面还是在后面进行巧记:在前是指量,改值不改向


总结

讲个通俗易懂例子,假如有天你家拆迁给你分房子:

指针常量:你单身一人时分房,居委会给你分个门牌号码(地址常量),说这是你的房子(这个常量指向的内存空间),你只根据门牌号到几栋几单元几号房,因为门牌号和房号关系是对应好的,你改变不了,但是你单身啊,你还可以决定这房子以后的女主是谁。

常量指针:结婚后分房,居委会给你个门牌但没填号码,说这是你跟你老婆的房,告诉你现在人少,你和老婆可以选小区内任意空房然后把号码填上,且今天之内还可修改,但你结婚了,你虽然可以任意选房,但是改不了里面住的女主了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/55261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt检查文件夹是否有写权限

Qt 使用如下函数能够判断路径或者文件是否可写: bool QFileInfo::isWritable() const 对于win10系统实测,结果不准确。继续排查,官方文档描述:a)如果未启用 NTFS 权限检查,Windows 上的结果将仅反映文件是…

作业2222

1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 默认yum源已配置 先关闭防火墙和selinux mount /dev/sr0 /mnt 安装http服务 yum install httpd 编写配置文件 vim /etc/httpd/conf.d/vhosts.conf 创建对应的资源文件 mkdir /www/openlab -p echo ‘welcom…

Win解答 | 解决键盘中 字母+空格 导致的输入法弹窗导致的一系列问题

近三个月来,一直都有一个键盘组合键的问题影响我的电脑使用,不管是打字还是打游戏,都会出现按键盘的 字母空格 弹出一个特殊符号的候选框,如下图所示 图片中为 S空格 所出现的弹窗 一个看似方便,实则难受的功能 其实打…

序列化协议:JSON和XML

作者:CARROT 链接:https://www.zhihu.com/question/604811576/answer/3100483698 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 json和xml都是数据传输的格式。比如我们开发过程中需要和网…

SpringBoot入门篇2 - 配置文件格式、多环境开发、配置文件分类

目录 1.配置文件格式(3种) 例:修改服务器端口。(3种) src/main/resources/application.properties server.port80 src/main/resources/application.yml(主要用这种) server:port: 80 src/m…

Go 1.21新增的 cmp 包详解

Go 1.21新增的 cmp 包提供了与比较有序值相关的类型和函数,前几篇文章讲解的 slices 包中的函数有大量使用到 cmp 包中的函数和类型。 cmp.Compare 函数 定义如下: func Compare[T Ordered](x, y T) int 返回值有以下几种情况: 如果 x 小…

MybatisPlus简单到入门

一、MybatisPlus简介 1、入门案例(重点): 1.SpringBoot整合MP1).创建新模块选择,Spring项初始化。2).选择当前模块使用的技术,只保留MySQL Driver就行,不要选择mybatis避免与后面导入mybatisPlus的依赖发…

[Go版]算法通关村第十四关白银——堆高效解决的经典问题(在数组找第K大的元素、堆排序、合并K个排序链表)

目录 题目:在数组中找第K大的元素解法1:维护长度为k的最小堆,遍历n-k个元素,逐一和堆顶值对比后,和堆顶交换,最后返回堆顶复杂度:时间复杂度 O ( k ( n − k ) l o g k ) O(k(n-k)logk) O(k(n−…

CSS实现内凹圆角,从而实现圆角边框

1、代码 <!DOCTYPE html> <html><head><style>.uu {position: relative;width: 400px;height: 300px;}img {width: 100%;height: 100%;z-index: 1;}.box_right_top {background-image: radial-gradient(circle at left bottom, transparent 50px, whi…

统信OS国产操作系统身份证读卡器社保卡读卡web网页开发使用操作流程

用于DONSEE系列身份证阅读器谷歌Chrome火狐Firefox插件&#xff0c;支持的型号有&#xff1a;EST-100、EST-100GS、EST-100G、EST-100U、EST-200G、EST-J13X等。 本方案无缝支持最新版本谷歌Chrome火狐Firefox等网页浏览器&#xff0c;支持H5、Vue、React、Node.js、Electron、…

【面向对象编程的三大特征:封装;继承;多态】

面向对象编程的三大特征&#xff1a;封装&#xff1b;继承&#xff1b;多态 前言&#xff1a; 最近在B站搜到韩顺平老师的java入门课&#xff0c;这里记录下实践&#xff1b; 熟悉&&掌握面向对象三大特征&#xff1a;封装&#xff1b;继承&#xff1b;多态; 多态是基…

设计模式--单例模式(Singleton Pattern)

一、什么是单例模式 单例模式是一种创建型设计模式&#xff0c;它旨在确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。换句话说&#xff0c;单例模式限制了类的实例化次数为一个&#xff0c;并提供一种在应用程序中共享一个实例的方式。这对于需要只有…

Linux系统编程:线程控制

目录 一. 线程的创建 1.1 pthread_create函数 1.2 线程id的本质 二. 多线程中的异常和程序替换 2.1 多线程程序异常 2.2 多线程中的程序替换 三. 线程等待 四. 线程的终止和分离 4.1 线程函数return 4.2 线程取消 pthread_cancel 4.3 线程退出 pthread_exit 4.4 线程…

Day44|leetcode 518.零钱兑换II、377. 组合总和 Ⅳ

完全背包理论基础 视频链接&#xff1a;带你学透完全背包问题&#xff01; 和 01背包有什么差别&#xff1f;遍历顺序上有什么讲究&#xff1f;_哔哩哔哩_bilibili 完全背包与01背包不同的地方就是&#xff1a;01背包每种物品只能取一次&#xff0c;而完全背包每种物品可以取…

2023年国赛数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…

yolov5中添加ShuffleAttention注意力机制

ShuffleAttention注意力机制简介 关于ShuffleAttention注意力机制的原理这里不再详细解释.论文参考如下链接here   yolov5中添加注意力机制 注意力机制分为接收通道数和不接受通道数两种。这次属于接受通道数注意力机制,这种注意力机制由于有通道数要求,所示我们添加的时候…

学习JAVA打卡第四十四天

Scanner类 ⑴Scanner对象 scanner对象可以解析字符序列中的单词。 例如&#xff1a;对于string对象NBA 为了解析出NBA的字符序列中的单词&#xff0c;可以如下构造一个scanner对象。 将正则表达式作为分隔标记&#xff0c;即让scanner对象在解析操作时把与正则表达式匹配的字…

【Linux】多线程概念线程控制

文章目录 多线程概念Linux下进程和线程的关系pid本质上是轻量级进程id&#xff0c;换句话说&#xff0c;就是线程IDLinux内核是如何创建一个线程的线程的共享和独有线程的优缺点 线程控制POSIX线程库线程创建线程终止线程等待线程分离 多线程概念 Linux下进程和线程的关系 在…

使用StreamLold写入 Starrocks报错:Caused by org

问题描述 使用StreamLoad写入Starrocks报错&#xff0c;报这个错误:Caused by: org.apache.http.ProtocolException: Content-Length header already present 代码案例 引入依赖 <!-- Starrocks使用StreamLoad发送Http请求 --><dependency><groupId>or…

Reactive响应式编程系列:一个Demo了解如何将事件驱动变成响应式

Reactive响应式编程系列&#xff1a;解密Lettuce如何实现响应式_lettuce原理_飞向札幌的班机的博客-CSDN博客Reactive响应式编程系列&#xff1a;解密Lettuce如何实现响应式_lettuce原理_飞向札幌的班机的博客-CSDN博客上面两篇文章也许介绍的内容过细&#xff0c;导致无法清晰…