学逆向的头像

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;
既不能改指针地址,也不能通过指针修改内容,常量指针 + 指针常量

#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;
}

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2501_94041724/article/details/168763820

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--