最近更新于 2024-05-05 14:18
环境
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;
}
常量指针
指针指向的地址存储的值不可修改
但是指针可以修改指向
用常量指针指向某个地址,通过这个指针进行使用就具有只读属性,可以保护数据免被修改
int main()
{
int a = 9;
int b = 1;
// 下面两种都是等价的
const int *c = a;
int const *d = b;
// 指针指向地址存储的值不可修改
*c = b;
// 指针指向的地址可以修改
d = &a;
}
C 语言指针常量和常量指针