C 指针常量与常量指针

类型 核心内容 关键特性 易混淆点
指针常量 int* const p = &a 指针本身是常量,内存地址固定不可修改,可以修改指向的值 1. const 修饰指针变量 p 2. p 不能再指向别的变量(p=&b报错) 3. *p 可以修改(*p=100合法) const 写在 * 后面,限制的是指针本身;容易和常量指针写反,分不清谁被 const 保护
常量指针 const int* p = &b 指针可修改指向地址,不能通过指针修改指向的值 1. const 修饰 *p(指向的数据) 2. p 可以指向别的变量(p=&a合法) 3. *p 不能修改(*p=100报错) const 写在 * 前面,保护的是指针指向的数据;⚠️ 只是不能通过指针改值,原变量 b 本身如果不是 const,b 可以直接修改

一句话口诀

const 离谁近,谁就不能改

● int* const p → const 靠近 p → p 不能改(地址固定,指针常量)

● const int* p → const 靠近 int(*p) → *p 不能改(常量指针)

拓展:const int *const p;

既不能改指针地址,也不能通过指针修改内容,常量指针 + 指针常量

c 复制代码
#include <stdio.h>
int main(void)
{
    int a = 10, b = 20;

    // 指针常量:p地址固定,*p可改
    int* const p = &a;
    *p = 100;   // ✅合法,修改指向的值
    // p = &b;  // ❌报错,不能修改指针地址

    // 常量指针:p可以换指向,*p不可改
    const int* q = &b;
    q = &a;     // ✅合法,修改指针指向
    // *q = 200; // ❌报错,不能通过指针修改内容
    return 0;
}
相关推荐
水饺编程2 小时前
第2章:Linux 基础,exit 命令
linux·c语言·汇编
低调滴开发2 小时前
3 行代码写崩一个函数?切片才是 Rust 字符串处理的正确姿势
开发语言·后端·rust
CodeYp20192 小时前
第15讲:二叉搜索树
开发语言·c++·二叉搜索树
猫猫.1532 小时前
HashTable、HashMap、ConcurrentHashMap 核心区别总结
java·开发语言·java-ee
乌暮3 小时前
综合案例:宠物电商系统
java·开发语言·spring·mvc·restful·1024程序员节
大文说跨境3 小时前
亚马逊多店铺的图片素材怎么批量去重:EXIF 与哈希的处理流程
开发语言·php
极客 - L U4 小时前
卡尔曼滤波从零到精通
c语言·数据结构·单片机·嵌入式硬件·mcu
大风起兮云飞扬丶5 小时前
Java——枚举
java·开发语言
小灰灰搞电子5 小时前
Rust+Slint 实现高级动态消息提示框源码分享
开发语言·rust