指针和常量指针在C语言中有不同的语义。在指针的值被修改时,编译器会发出警告或错误信息。而在常量指针中,指针的值是不能被修改的。但是,编译器在处理指针和常量指针时可能会忽略它们之间的差异。
为了避免这种情况,可以使用const关键字来明确指针的常量性。例如:
int num = 10;
int* p = # // 普通指针
const int* cp = # // 常量指针
*p = 20; // 正常赋值
*cp = 20; // 编译错误,无法修改常量指针指向的值
int* pc = cp; // 编译错误,需要进行强制类型转换
const int* const cpc = # // 常量指针常量
*cpc = 20; // 编译错误,常量指针无法修改指向的值和地址
int* pcc = cpc; // 编译错误,需要进行强制类型转换