首页 > 解决方案 > 通过 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)也会导致错误。为什么会这样?

标签: arrayscpointersconstants

解决方案


因为 ispa + 2与 具有相同的类型pa。要么你想阻止数组被修改,要么你不想,所以结果与原始指针具有相同的类型是有意义的。


推荐阅读