【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针

LuckiBit

目录

  • 常量指针和指向常量的指针有什么区别?
    • 1. 指向常量的指针(Pointer to Constant)
      • 声明方式:
      • 示例:
      • 解释:
    • 2. 常量指针(Constant Pointer)
      • 声明方式:
      • 示例:
      • 解释:
    • 3. 常量指针与指向常量的指针结合使用
      • 声明方式:
      • 示例:
      • 解释:
    • 总结
    • 4. 结束语
    • 相关文章:

常量指针和指向常量的指针有什么区别?

在C语言中,常量指针(Pointer to constant)和指向常量的指针(Constant pointer)是两个不同的概念。它们在声明和使用上有显著区别。以下是详细的解释和示例:

1. 指向常量的指针(Pointer to Constant)

定义:指向常量的指针是一个指针,该指针所指向的值是常量,不能通过该指针修改值,但指针本身可以指向其他地址。

声明方式:

const 数据类型 *指针变量名;

示例:

int a = 10;
int b = 20;
const int *p = &a; // p是指向常量的指针,指向a的地址*p = 15; // 错误:不能通过p修改a的值
p = &b;  // 正确:可以让p指向b

解释:

  • const int *p 表示 p 是一个指向 int 常量的指针。通过 p 不能修改其指向的值。
  • 尝试修改 *p 会产生编译错误,因为 *p 被视为常量。
  • 可以改变 p 指向的地址,即可以让 p 指向另一个 int 类型的变量。

2. 常量指针(Constant Pointer)

定义:常量指针是一个指针,该指针本身是常量,不能改变指向,但可以通过该指针修改指向的值。

声明方式:

数据类型 *const 指针变量名;

示例:

int a = 10;
int b = 20;
int *const p = &a; // p是常量指针,指向a的地址*p = 15; // 正确:可以通过p修改a的值
p = &b;  // 错误:不能修改p的指向

解释:

  • int *const p 表示 p 是一个常量指针,指向 int 类型的变量。p 本身是常量,即不能改变其指向的地址。
  • 可以通过 p 修改其指向的值。
  • 尝试改变 p 的指向会产生编译错误,因为 p 是常量指针。

3. 常量指针与指向常量的指针结合使用

有时,需要同时限制指针的指向和指向的值,这时可以将两者结合使用。

声明方式:

const 数据类型 *const 指针变量名;

示例:

int a = 10;
const int *const p = &a; // p是指向常量的常量指针,指向a的地址*p = 15; // 错误:不能通过p修改a的值
p = &b;  // 错误:不能修改p的指向

解释:

  • const int *const p 表示 p 是一个常量指针,指向 int 常量。既不能修改 p 的指向,也不能通过 p 修改指向的值。

总结

  • 指向常量的指针:不能通过指针修改指向的值,但可以改变指针的指向。
  • 常量指针:不能改变指针的指向,但可以通过指针修改指向的值。
  • 指向常量的常量指针:既不能改变指针的指向,也不能通过指针修改指向的值。

这两种类型的指针在C语言中的具体使用场景会有所不同,理解它们的区别可以帮助更好地控制和管理程序中的数据和内存。

4. 结束语

  1. 本节内容已经全部介绍完毕,希望通过这篇文章,大家对C语言中的常量指针和指向常量的指针有了更深入的理解和认识。
  2. 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持!LuckiBit

相关文章:

  • 指针的神秘探险:从入门到精通的奇幻之旅 !
  • const 关键字详解

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

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

相关文章

zookeeper子结点方式实现分布式锁(阻塞,非阻塞)

一,阻塞式和非阻塞式 “阻塞”和“非阻塞”只是一个人为的概念,“阻塞”说的是一个线程去尝试获取锁,如果失败,就阻塞在这里,监听到持有锁的线程释放,再次去尝试获取。 而“非阻塞”是我尝试一次失败了&am…

泛域名绑定到wordpress网站二级目录

要将WordPress的泛域名绑定到二级目录&#xff0c;你需要在你的服务器上修改Apache或Nginx配置文件。以下是两种最常见的服务器配置的示例&#xff1a; Apache服务器 编辑你的虚拟主机配置文件&#xff0c;通常位于/etc/apache2/sites-available/目录下。 <VirtualHost *…

2024 暑假友谊赛-热身1

[ABC102D] Equal Cut - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路:找在区间[2,n-1]中找到i,j,k三个点,把序列分割成4个区间:[1,i],[i1,j],[j1,k],[k1,n] 暴力的做法是枚举i,j,k加上前缀和是o(n^3)的 key:"考虑枚举处于中间的j&#xff0c;然后用i平衡左两个区间,…

【踩坑系列-JS】iframe中的url参数获取

Author&#xff1a;赵志乾 Date&#xff1a;2024-07-24 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 问题描述 系统A的页面中以iframe的方式嵌入了系统B的页面&#xff0c;并需要将A页面url中的参数传递给B页面。 最初的实现方式是&am…

【es】elasticsearch 自定义排序-按关键字位置排序

一 背景 要求es查询的结果按关键字位置排序&#xff0c;位置越靠前优先级越高。 es版本7.14.0&#xff0c;项目是thrift&#xff0c;也可以平替springboot&#xff0c;使用easyes连接es。 二 easyes使用 配easyes按官方文档就差不多了 排序 | Easy-Es 主要的一个问题是easy…

Lua实现面向对象以及类的继承

0.简单前言 1、面向对象主要四个特征&#xff1a;封装&#xff0c;继承&#xff0c;多态&#xff0c;抽象 2、Lua是种简单精致小巧的语言&#xff0c;其本质是个表&#xff08;table&#xff09;&#xff0c;变量和方法皆可看作为该表的元素。 P.S. 该博客和代码为个人编写习…

Golang零基础入门课_20240726 课程笔记

视频课程 最近发现越来越多的公司在用Golang了&#xff0c;所以精心整理了一套视频教程给大家&#xff0c;这个只是其中的第一部&#xff0c;后续还会有很多。 视频已经录制完成&#xff0c;完整目录截图如下&#xff1a; 课程目录 01 第一个Go程序.mp402 定义变量.mp403 …

【工具类】Java DES加密解密

package com.util;import java.security.Key; import java.security.SecureRandom;import javax.crypto.Cipher; import javax.crypto.KeyGenerator;import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /*** DES算法*/ SuppressWarnings("restriction")…

Leetcode—263. 丑数【简单】

2024每日刷题&#xff08;147&#xff09; Leetcode—263. 丑数 实现代码 class Solution { public:bool isUgly(int n) {if(n < 0) {return false;}for(const int prime: {2, 3, 5}) {while(n % prime 0) {n / prime;}}return n 1;} };运行结果 之后我会持续更新&#…

ORACLE RAC 环境真的不能开启主机防火墙吗?

一直以来&#xff0c;安装ORACLE RAC&#xff0c;都是直接关闭防火墙&#xff0c;要问为什么&#xff0c;说是官方的推荐&#xff0c;具体可以见 RAC instabilities due to firewall (netfilter/iptables) enabled on the cluster interconnect (Doc ID 554781.1)&#xff0c;启…

iframe 内嵌跨域页面如何做到高度自适应

场景描述&#xff1a; parent.html 页面中通过iframe内嵌children.html页面&#xff0c;且children.html 页面高度是动态变化的&#xff0c;此时需要parent.html中的iframe的高度自适应children.hml 的高度&#xff0c;避免出现滚动条., 解决方法分为以下两步 1&#xff0c;pa…

win11 备份mysql数据 卸载mysql 5 安装mysql 8详细教程(mysql的数据备份与卸载与安装)

如果是第一次安装mysql便可以直接看第三步 第一步&#xff1a;数据备份 我选择的是备份全部数据 以管理员身份运行cmd输入mysqldump -u root -p --all-databases --routines --triggers --single-transaction > C:\ProgramTools\MySql\backup_5.6.sql 其中&#xff1a;-u…

追问试面试系列:开篇

我们不管做任何事情&#xff0c;都是需要个理由&#xff0c;而不是盲目去做。 为什么写这个专栏&#xff1f; 就像我们被面试八股文时&#xff0c;市面上有很多面试八股文&#xff0c;随便一个八股文都是500&#xff0c;甚至1000面试题。诸多面试题&#xff0c;难道我们需要一…

前端和Postman调用同一个接口,拿到的数据不一样

1、表现 联调一个List接口&#xff0c;Postman自测得到的ID和前端调用得到的ID&#xff0c;结果不一样。前者结果&#xff1a; 后者结果&#xff1a; 同一份代码、同一个数据库&#xff0c;出现这种错误&#xff0c;大概率是类型转换时出问题了&#xff0c;但检查代码发现&…

对称性破缺与涌现——复杂科学与艺术之间的共鸣

中科院物理所 2022年08月14日 11:08 北京 以下文章来源于集智俱乐部 &#xff0c;作者十三维 导语 对复杂性的研究曾颠覆了科学原有的还原论范式&#xff0c;那么当复杂科学遇到艺术时会怎样&#xff1f;社会生物学家爱德华威尔逊&#xff08;E.O. Wilson&#xff09;曾说&am…

免费【2024】springboot 城市交通管理系统的设计与实现

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

c++中的快速排序核心代码

快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另外一部分的所有数据都要小&#xff0c;然后再按此方法对这两部分数据分别进行快速…

com.github.yulichang.wrapper.MPJLambdaWrapper selectJoinOne用法

selectJoinOne方法是mybatis-plus-join项目中的一个方法&#xff0c;用于实现单表查询并关联查询其他表的数据。以下是一个使用selectJoinOne的示例&#xff1a; 假设我们有两个表&#xff1a;用户&#xff08;User&#xff09;和订单&#xff08;Order&#xff09;&#xff0…

C++箭头运算符->

在C中&#xff0c;箭头运算符&#xff08;Arrow Operator&#xff09; -> 是一个重要的运算符&#xff0c;主要用于通过指针访问对象的成员。它的作用是解引用指针并访问成员&#xff0c;简化了指针操作的语法。 1. 基本用法 当你有一个指向对象的指针时&#xff0c;可以使…

Python 获取硬盘 主板等生产注册码

import wmi import random import ossec"t95p0q2f6dz1cxmowgjensr7yh384bvualki" dec"dn7vhlk3wx1efsyc56zu2bomjtq8i0g4rp9a"cwmi.WMI()for physical_disk in c.Win32_DiskDrive():hard_seralphysical_disk.SerialNumber #获取硬盘系列号print("硬盘…