8、指针 + const

判断 const 修饰的是指针还是内容

1. const char *pchar const *p

这两种声明是等价的,表示指针指向的内容是常量。通过分析 const 关键字的位置,可以确定 const 修饰的是指针指向的内容。

  • const char *pconst 修饰的是 char,即 p 指向的内容。
  • char const *pconst 修饰的是 char,即 p 指向的内容。

示例代码:

#include <stdio.h>

int main() {
    const char *p1 = "Hello"; // 等价于 char const *p1
    char const *p2 = "World";

    // 不能通过指针 p1 和 p2 修改指向的内容
    // *p1 = 'h'; // 错误:不能修改 p1 指向内容的值
    // *p2 = 'w'; // 错误:不能修改 p2 指向内容的值

    // 可以改变指针 p1 和 p2 本身的值
    p1 = "New Hello";
    p2 = "New World";

    printf("p1: %s\n", p1);
    printf("p2: %s\n", p2);

    return 0;
}

// 输出结果:
// p1: New Hello
// p2: New World

2. char *const p

表示指针本身是常量,不能改变指针的值,但可以通过指针修改指向的内容。通过 const 关键字的位置,可以确定 const 修饰的是指针本身。

  • char *const pconst 修饰的是指针 p 本身。

示例代码:

#include <stdio.h>

int main() {
    char str[] = "Hello";
    char *const p = str;

    // 可以通过指针 p 修改指向的内容
    *p = 'h';

    // 不能改变指针 p 本身的值
    // p = "New Hello"; // 错误:不能改变指针 p 本身

    printf("p: %s\n", p);

    return 0;
}

// 输出结果:
// p: hello

3. const char *const p

表示指针本身和指针指向的内容都是常量。通过 const 关键字的位置,可以确定 const 修饰的是指针本身和指针指向的内容。

  • const char *const p:第一个 const 修饰指向的内容,第二个 const 修饰指针本身。

示例代码:

#include <stdio.h>

int main() {
    const char *const p = "Hello";

    // 不能通过指针 p 修改指向的内容
    // *p = 'h'; // 错误:不能修改 p 指向内容的值

    // 不能改变指针 p 本身的值
    // p = "New Hello"; // 错误:不能改变指针 p 本身

    printf("p: %s\n", p);

    return 0;
}

// 输出结果:
// p: Hello

4. char *p const

这种声明在C语言中是无效的,因为 const 不能修饰指针之后。指针的常量属性必须在指针名称之前声明。

// 错误示例:
// char *p const;
// 编译错误:在C语言中,不允许这种声明。

判断方法总结

  • const* 之前:表示指针指向的内容是常量,不能通过指针修改内容,但可以改变指针本身。
    • 示例:const char *pchar const *p
  • const* 之后:表示指针本身是常量,不能改变指针的值,但可以通过指针修改指向的内容。
    • 示例:char *const p
  • 两个 const:第一个 const 修饰指向的内容,第二个 const 修饰指针本身,指针和指向的内容都是常量。
    • 示例:const char *const p
  • 36
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值