常量指针、指针常量及常量指针常量

目录

[1. 常量指针(Pointer to Constant)](#1. 常量指针(Pointer to Constant))

[2. 指针常量(Constant Pointer)](#2. 指针常量(Constant Pointer))

[3. 常量指针常量(Constant Pointer to Constant)](#3. 常量指针常量(Constant Pointer to Constant))


  • 常量指针:指针指向的值不能改,但指针本身可以指向其他地址。
  • 指针常量:指针本身不能改,但可以修改指向的值。
  • 常量指针常量:指针和指针指向的值都不能改。

常量指针(pointer to constant)和指针常量(constant pointer)在C/C++中是两个不同的概念,它们的区别主要在于指针和指向的值哪个是常量。下面详细讲解它们的区别并举例说明。

1. 常量指针(Pointer to Constant)

定义: 常量指针是指向常量的指针,也就是说,通过这个指针无法修改它所指向的值。

语法: const data_type *pointer_name; 或 data_type const *pointer_name;

特性:

  • 指向的值是常量,不能通过指针修改它所指向的值。
  • 指针本身可以指向其他地址。

示例代码:

复制代码
#include <stdio.h>

int main() {
    int x = 10;
    int y = 20;
    const int *p = &x; // p是一个常量指针,指向x

    printf("x = %d\n", *p);

    // *p = 15; // 错误:不能通过常量指针修改指向的值

    p = &y; // 可以改变指针p的指向
    printf("y = %d\n", *p);

    return 0;
}

解释:

  • const int *p = &x; 表示 p 是一个指向 int 类型常量的指针,通过 p 不能修改 x 的值。
  • p = &y; 是合法的操作,可以改变 p 的指向。

2. 指针常量(Constant Pointer)

定义: 指针常量是一个常量指针,意思是指针本身是常量,即指针的地址不能修改,但可以通过它来修改指针所指向的值。

语法: data_type *const pointer_name;

特性:

  • 指针本身是常量,不能指向其他地址。
  • 可以通过指针修改它所指向的值。

示例代码:

复制代码
#include <stdio.h>

int main() {
    int x = 10;
    int y = 20;
    int *const p = &x; // p是一个指针常量,指向x

    printf("x = %d\n", *p);

    *p = 15; // 可以通过指针常量修改指向的值
    printf("Modified x = %d\n", *p);

    // p = &y; // 错误:不能改变指针的指向

    return 0;
}

解释:

  • int *const p = &x; 表示 p 是一个指针常量,不能改变指针 p 的指向。
  • 可以通过 *p = 15; 修改 x 的值。

3. 常量指针常量(Constant Pointer to Constant)

定义: 既是指向常量的指针,又是常量指针,既不能改变指针指向的地址,也不能修改指针指向的值。

语法: const data_type *const pointer_name;

示例代码:

复制代码
#include <stdio.h>

int main() {
    int x = 10;
    const int *const p = &x; // p既是指向常量的指针,又是常量指针

    printf("x = %d\n", *p);

    // *p = 15; // 错误:不能修改指向的值
    // p = &x;  // 错误:不能改变指针的指向

    return 0;
}
相关推荐
reikocao6 分钟前
卡尔曼滤波的动态机制:P如何改变融合权重
算法
漂流瓶jz1 小时前
UVA-1612 猜名次 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·题解·排序·aoapc·算法竞赛入门经典
吞下星星的少年·-·1 小时前
Div.2 CF 1130B题(构造,贪心)
算法·贪心·构造
是main不是漫2 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
深圳市快瞳科技有限公司4 小时前
野外鸟类AI识别落地实录:输入适配、结构化输出、去重聚合与置信度分流的工程实践
算法·计算机视觉·鸟类识别·鸟类ai识别·野外鸟类观测·林业调查
专注仿真5 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
小豆庄5 小时前
视频遮罩追踪退场后ID撞号的排查—多目标场景下的失效
opencv·算法·bug·视频·python3.11
Tisfy6 小时前
LeetCode 3882.网格图中最小异或路径:动态规划
算法·leetcode·动态规划
D e re k ZH7 小时前
P5025 [SNOI2017] 炸弹
c++·算法
A boy CDEF girl7 小时前
算法题专栏:优选算法
数据结构·算法·leetcode