arrays - 通过 const 指针加上 C 中的偏移量修改值
问题描述
#include<stdio.h>
int main() {
int a[10] = {1, 2, 3, 4};
const int *pa = a;
*(pa + 2) = 4; // error
char b[4] = "abc";
const char *pb = b;
*(pb + 2) = 'c'; // error
int c = 10;
const int *pc = &c;
*(pc + 2) = 4; // error
}
据我了解,const int/char *
唯一的限制是我们不能修改它指向的值。但是,修改似乎*(pa + 2)
也会导致错误。为什么会这样?
解决方案
因为 ispa + 2
与 具有相同的类型pa
。要么你想阻止数组被修改,要么你不想,所以结果与原始指针具有相同的类型是有意义的。
推荐阅读
- hadoop - 在 hive 中读取 tsv 格式文件的架构
- enums - 如何在实现特征的现有类型的枚举范围内实现特征?
- jms - OpenNMS 的 JMS 接口的主题名称是什么
- laravel - Laravel 计数和按子关系分组
- php - PHP将英文日期转换为法文日期
- javascript - 提供“扩展编码”数据时结果失真
- python - Discord.py 我如何做到这一点,这样它就不会将 url 和参数转换为小写,而只会让它转换命令?
- c# - 使用 linq 连接多行中特定列的值
- javascript - Javascript `fetch` 和 Shibboleth CORS 错误
- c++ - 使用 SFINAE 检测是否存在返回类型为 void 的函数