const char*和char* const的区别

240 阅读1分钟

const char*

可以理解为一把没有子弹的98K 你可以用它瞄任何人 但是没法用它崩人
被const char*修饰的指针就是一个只读的窗口 可以通过这个窗口看到变量 但是不能对变量进行修改

#include <stdio.h>
int main(void) {
    char arr[5] = {'a','b','c','d','e'};
    const char* ptr = &arr[0]; // 指向数组第一个位置
    // *ptr = 'A';            报错 不能通过const char*修改变量
    arr[0] = 'A'
    printf("arr[0] = %c\n", *ptr); // 变量改变后 通过const char*能访问到修改后的值
    ptr = &arr[1];             // 指向数组第二个位置
    // *ptr = 'B'             报错 不能通过const char*修改变量
    arr[1] = 'B'
    printf("arr[1] = %c\n", *ptr); // 变量改变后 通过const char*能访问到修改后的值
    
    return 0;
}

char const*

可以理解为一个跟踪器 你可以知道目标在哪 也可以去抓目标 但是一个跟踪器只能跟踪一个目标
被char* const修饰的指针可以读可以修改变量 但是这个指针被初始化后就不能在指向其他变量了

#include <stdio.h>
int main(void) {
    char arr[5] = {'a','b','c','d','e'};
    char* const ptr = &arr[0];     // ptr指向数组第一个元素
    *ptr = 'A';                    // 可以通过ptr修改变量
    printf("arr[0] = %c\n", *ptr);
    // ptr = &arr[1]               报错 不能指向别的变量
    
    return 0;
}