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

目录

[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;
}
相关推荐
王老师青少年编程3 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮4 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说4 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
wuweijianlove5 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法
leoufung5 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了5 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
HXDGCL5 小时前
矩形环形导轨:自动化循环线的核心运动单元解析
运维·算法·自动化
谭欣辰6 小时前
C++ 排列组合完整指南
开发语言·c++·算法
代码中介商6 小时前
银行管理系统的业务血肉 —— 流程、状态机、输入校验与持久化(下篇)
c语言·算法
foundbug9996 小时前
自适应滤除直达波干扰的MATLAB实现
开发语言·算法·matlab