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

目录

[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;
}
相关推荐
JieE2127 小时前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
JieE2121 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack202 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树2 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2122 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2122 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术2 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦3 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050733 天前
(一)小红的数组操作
算法·编程语言