最近更新于 2023-02-19 00:54

环境

Debian 11 (arm64)

编译器 gcc 10.2.1;编译标准 C17;参数:-std=c17 -no-pie -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Werror=format-security -Wextra -pedantic -Wimplicit-fallthrough -Wsequence-point -Wswitch-unreachable -Wswitch-enum -Wstringop-truncation -Wbool-compare -Wtautological-compare -Wfloat-equal -Wshadow=global -Wpointer-arith -Wpointer-compare -Wcast-align -Wcast-qual -Wwrite-strings -Wdangling-else -Wlogical-op -Wconversion -g -O0

指针常量

指针为常量,即指针不能修改指向
但是指针指向地址存储的值是可以修改的
因为指向的地址不能修改,所以必须在定义时进行初始化,给它一个地址

int main()
{
    int a = 9;
    int b = 1;
    int * const c = &a;

    // 无法修改指向
    c = &b;

    // 可以修改指针指向地址存储值
    *c = b;
}

file

常量指针

指针指向的地址存储的值不可修改
但是指针可以修改指向
用常量指针指向某个地址,通过这个指针进行使用就具有只读属性,可以保护数据免被修改

int main()
{
    int a = 9;
    int b = 1;
    // 下面两种都是等价的
    const int *c = a;
    int const *d = b;

    // 指针指向地址存储的值不可修改
    *c = b;

    // 指针指向的地址可以修改
    d = &a;
}

file

作者 IYATT-yx