C提高——const专题

const 修饰变量

例如:const int a = 0;

int main() {
    // int const a = 0;// 和下面的写法意思是一样的
    const int a = 0;
    //a = 10; // 报错
    int *p = &a;
    *p = 10;

    printf("a=%d\n", a);
    system("pause");
}

a=10执行报错,因为变量的本质是一段连续内存空间的编号(门牌号)。C语言中,加const修饰,代表这个门牌号不能被修改,但它所指向的内存空间是可以被指针间接修改的。C语言中的const是个“冒牌货”。

const 修饰指针指向的内存空间

例如:const char *a;

int main() {
    const char *a = malloc(sizeof(30));
    memset(a, 0, sizeof(a));
    //*a = "1233"; // 修改指针指向的堆空间报错
    a = 111;// 修改指针变量本身不报错

    system("pause");
}

指针所指向的内存空间不能被修改,但指针变量本身可以被修改。

const修饰指针变量本身

例如:char * const a;

int main() {
    char * const a = malloc(sizeof(30));
    memset(a, 0, sizeof(a));
    *a = "111";// 修改指针指向的堆空间成功
    //a= 1;// 修改指针变量本身报错

    system("pause");
}

指针变量本身不能被修改,但它所指向的内存空间可以被修改。

const既修饰指针变量也修饰内存空间变量

例如:
const char * const a;// 那么指针变量本身 和 它所指向的内存空间都不能被修改。

总结:
1、看const是放在 * 的左边还是右边,放在左边就是修饰内存空间变量,放在右边就是修饰指针变量。
2、指针变量 和 它指向的内存空间变量,是两个不同的概念。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值