当前位置: 首页 > news >正文

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

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

一、指针变量

定义:指针变量是指存放地址的变量,其值是地址。
一般格式:基类型 指针变量名;(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前面还是在后面进行巧记:在前是指量,改值不改向


总结

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

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

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

相关文章:

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

指针变量、指针常量与常量指针 一、指针变量 定义:指针变量是指存放地址的变量,其值是地址。 一般格式:基类型 指针变量名;(int p) 关键点: 1、int * 表示一种指针类型(此处指int 类型),p(变量…...

mq与mqtt的关系

文章目录 mqtt 与 mq的区别mqtt 与 mq的详细区别传统消息队列RocketMQ和微消息队列MQTT对比:MQ与RPC的区别 mqtt 与 mq的区别 mqtt:一种通信协议,规范 MQ:一种通信通道(方式),也叫消息队列 MQ…...

代码大全阅读随笔 (二)

软件设计 设计就是把需求分析和编码调试连在一起的活动。 设计不是在谁的头脑中直接跳出来了,他是不断的设计评估,非正式讨论,写实验代码以及修改实验代码中演化和完善。 作为软件开发人员,我们不应该试着在同一时间把整个程序都塞…...

vue 项目的屏幕自适应方案

方案一:使用 scale-box 组件 属性: width 宽度 默认 1920height 高度 默认 1080bgc 背景颜色 默认 "transparent"delay自适应缩放防抖延迟时间(ms) 默认 100 vue2版本:vue2大屏适配缩放组件(vu…...

23软件测试高频率面试题汇总

一、 你们的测试流程是怎么样的? 答:1.项目开始阶段,BA(需求分析师)从用户方收集需求并将需求转化为规格说明书,接 下来在项目组领导会组织需求评审。 2.需求评审通过后,BA 会组织项目经理…...

PHP8的匿名函数-PHP8知识详解

php 8引入了匿名函数(Anonymous Functions),它是一种创建短生命周期的函数,不需要命名,并且可以在其作用域内直接使用。以下是在PHP 8中使用匿名函数的知识要点: 1、创建匿名函数,语法格式如下&…...

Redis—Redis介绍(是什么/为什么快/为什么做MySQL缓存等)

一、Redis是什么 Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景。 Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、…...

C语言链表梳理-2

链表头使用结构体&#xff1a;struct Class 链表中的每一项使用结构体&#xff1a;struct Student#include <stdio.h>struct Student {char * StudentName;int StudentAge;int StudentSex;struct Student * NextStudent; };struct Class {char *ClassName;struct Stude…...

【深度学习】实验03 特征处理

文章目录 特征处理标准化归一化正则化 特征处理 标准化 # 导入标准化库 from sklearn.preprocessing import StandardScalerfrom matplotlib import gridspec import numpy as np import matplotlib.pyplot as plt import warnings warnings.filterwarnings("ignore&quo…...

基于Dpabi的功能连接

1.预处理 这里预处理用Gretna软件进行&#xff0c;共分为以下几步&#xff1a; &#xff08;1&#xff09;DICOM转NIfTI格式 (2)去除前10个时间点(Remove first 10 times points)&#xff1a;由于机器刚启动、被试刚躺进去也还需适应环境&#xff0c;导致刚开始扫描的数据很…...

在React项目是如何捕获错误的?

文章目录 react中的错误介绍解决方案后言 react中的错误介绍 错误在我们日常编写代码是非常常见的 举个例子&#xff0c;在react项目中去编写组件内JavaScript代码错误会导致 React 的内部状态被破坏&#xff0c;导致整个应用崩溃&#xff0c;这是不应该出现的现象 作为一个框架…...

基于内存池的 简单高效的数据库 SDK简介

基于内存池的 简单高效的数据库 SDK简介 下载地址&#xff1a; https://gitee.com/tankaishuai/powerful_sdks/tree/master/shm_alloc_db_heap shm_alloc_db_heap 是一个基于内存池实现的简单高效的文件型数据存储引擎&#xff0c;利用它可以轻松地像访问内存块一样读、写、增…...

python实例方法,类方法和静态方法区别

为python中的装饰器 实例方法 实例方法时直接定义在类中的函数&#xff0c;不需要任何修饰。只能通过类的实例化对象来调用。不能通过类名来调用。 类方法 类方法&#xff0c;是类中使用classmethod修饰的函数。类方法在定义的时候需要有表示类对象的参数(一般命名为cls&#…...

Pyecharts教程(四):使用pyecharts绘制3D折线图

Pyecharts教程(四):使用pyecharts绘制3D折线图 作者:安静到无声 个人主页 目录 Pyecharts教程(四):使用pyecharts绘制3D折线图准备工作数据准备绘制3D折线图推荐专栏在这篇文章中,我们将学习如何使用pyecharts库来绘制一个3D折线图。pyecharts是一个用于生成Echarts图表的…...

【stable-diffusion使用扩展+插件和模型资源(下)】

插件模型魔法图片等资源&#xff1a;https://tianfeng.space/1240.html 书接上文&#xff1a;&#xff08;上&#xff09; 插件推荐 1.lobe theme lobe theme是一款主题插件&#xff0c;直接可以在扩展安装 界面进行了重新布局&#xff0c;做了一些优化&#xff0c;有兴趣的…...

一文了解SpringBoot中的Aop

目录 1.什么是Aop 2.相关概念 3.相关注解 4.为什么要用Aop 5.Aop使用案例 1.什么是Aop AOP&#xff1a;Aspect Oriented Programming&#xff0c;面向切面&#xff0c;是Spring三大思想之一&#xff0c;另外两个是 IOC-控制反转 DI-依赖注入 (Autowired、Qualifier、Re…...

android系统启动流程之zygote如何创建SystemServer进程

SystemServer:是独立的进程&#xff0c;主要工作是管理服务的&#xff0c;它将启动大约90种服务Services. 它主要承担的职责是为APP的运行提供各种服务&#xff0c;像AMS,WMS这些服务并不是一个独立的进程&#xff0c; 它们其实都是SystemServer进程中需要管理的的众多服务之一…...

【awd系列】Bugku S3 AWD排位赛-9 pwn类型

文章目录 二进制下载检查分析运行二进制ida分析解题思路exp 二进制下载 下载地址&#xff1a;传送门 检查分析 [rootningan 3rd]# file pwn pwn: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for …...

vcomp140.dll丢失的修复方法分享,电脑提示vcomp140.dll丢失修复方法

今天&#xff0c;我的电脑出现了一个奇怪的问题&#xff0c;打开某些程序时总是提示“找不到vcomp140.dll文件”。这个问题让我非常头疼&#xff0c;因为我无法正常使用电脑上的一些重要软件。为了解决这个问题&#xff0c;我在网上查找了很多资料&#xff0c;并尝试了多种方法…...

Docker file解析

文章目录 简介构建的三步骤Docker执行Dockerfile的大致流程DockerFile常用保留字指令创建第一个Dockerfile镜像的缓存特性 Docker file 解析 简介 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本&#xff0c;记录了镜像构…...

CSMA/CA协议NAV计算实战:用C语言模拟802.11无线网络时序(附完整代码)

CSMA/CA协议NAV计算实战&#xff1a;用C语言模拟802.11无线网络时序&#xff08;附完整代码&#xff09; 在无线网络通信领域&#xff0c;CSMA/CA协议是确保数据传输可靠性的基石。不同于有线网络中的CSMA/CD协议&#xff0c;CSMA/CA通过独特的冲突避免机制解决了无线环境中的隐…...

面向对象高级三:内部类 枚举 泛型 java.lang包下常用API

一.内部类1.内部类概述 2.成员内部类&#xff08;实例内部类&#xff09;&#xff08;1&#xff09;成员内部类可以定义类的一切成员&#xff08;2&#xff09;当创建对象时不能直接给内部类创建对象而要先创建外部类的对象 然后new成员内部类的对象&#xff08;3&#xff09;在…...

Blazor组件测试工具:BootstrapBlazor测试库完整指南

Blazor组件测试工具&#xff1a;BootstrapBlazor测试库完整指南 【免费下载链接】BootstrapBlazor 项目地址: https://gitcode.com/gh_mirrors/bo/BootstrapBlazor BootstrapBlazor测试库是企业级Blazor UI组件库的质量保障体系&#xff0c;提供了一套完整的组件测试解…...

all-MiniLM-L6-v2开发者案例:集成至LangChain实现动态RAG检索链路

all-MiniLM-L6-v2开发者案例&#xff1a;集成至LangChain实现动态RAG检索链路 在构建智能问答或文档分析系统时&#xff0c;一个核心挑战是如何从海量文本中快速、准确地找到最相关的信息。传统的基于关键词的搜索&#xff0c;往往因为无法理解语义而“答非所问”。今天&#…...

【Linux信号】Linux进程信号(上):信号产生方式和闹钟

&#x1f3ac; 个人主页&#xff1a;艾莉丝努力练剑❄专栏传送门&#xff1a;《C语言》《数据结构与算法》《C/C干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法&#xff1a;从基础到进阶》《Python干货分享》⭐️为天地立心&#xff0c;为生民立命…...

OpenClaw性能优化:降低GLM-4.7-Flash任务Token消耗的5个技巧

OpenClaw性能优化&#xff1a;降低GLM-4.7-Flash任务Token消耗的5个技巧 1. 为什么需要关注Token消耗 当我第一次在本地部署OpenClaw并接入GLM-4.7-Flash模型时&#xff0c;最让我震惊的不是它的自动化能力&#xff0c;而是执行简单任务后查看账单时的Token消耗数字。一个看似…...

OpenClaw+GLM-4.7-Flash学习助手:自动整理课程笔记与生成复习题

OpenClawGLM-4.7-Flash学习助手&#xff1a;自动整理课程笔记与生成复习题 1. 为什么需要自动化学习助手&#xff1f; 去年备考研究生时&#xff0c;我每天要处理3-4小时的课程视频。最痛苦的不是听课本身&#xff0c;而是课后整理&#xff1a;手动截取关键片段、转录字幕、标…...

告别性能瓶颈:如何用NVIDIA Profile Inspector释放显卡90%潜能?

告别性能瓶颈&#xff1a;如何用NVIDIA Profile Inspector释放显卡90%潜能&#xff1f; 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 为什么官方显卡控制面板永远像个"锁着的工具箱"&#…...

3分钟轻松获取无水印抖音视频:DouYinBot全能解析工具使用指南

3分钟轻松获取无水印抖音视频&#xff1a;DouYinBot全能解析工具使用指南 【免费下载链接】DouYinBot 抖音无水印下载 项目地址: https://gitcode.com/gh_mirrors/do/DouYinBot 在短视频创作的浪潮中&#xff0c;每个创作者都曾遇到这样的困扰&#xff1a;精心挑选的抖音…...

NTP配置避坑指南:华三/华为/思科设备时间同步差异对比

NTP配置避坑指南&#xff1a;华三/华为/思科设备时间同步差异对比 在网络运维中&#xff0c;时间同步是确保日志分析、安全审计和故障排查准确性的基础。不同厂商的设备在NTP配置上存在细微但关键的差异&#xff0c;这些差异往往成为混合环境部署中的"暗坑"。本文将深…...