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

目录

[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;
}
相关推荐
MZWeiei2 小时前
PTA:运用顺序表实现多项式相加
算法
GISer_Jing2 小时前
Javascript排序算法(冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序)详解
javascript·算法·排序算法
cookies_s_s2 小时前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法
不想编程小谭2 小时前
力扣LeetCode: 2506 统计相似字符串对的数目
c++·算法·leetcode
水蓝烟雨3 小时前
[HOT 100] 2187. 完成旅途的最少时间
算法·hot 100
菜鸟一枚在这4 小时前
深度解析建造者模式:复杂对象构建的优雅之道
java·开发语言·算法
gyeolhada4 小时前
2025蓝桥杯JAVA编程题练习Day5
java·数据结构·算法·蓝桥杯
阿巴~阿巴~4 小时前
多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题
开发语言·数据结构·c++·算法·宽度优先
给bug两拳4 小时前
Day9 25/2/22 SAT
算法
_Itachi__5 小时前
LeetCode 热题 100 73. 矩阵置零
算法·leetcode·矩阵