const在c和c++中的不同

  最近开始由学习c转到c++:从面向过程到面向对象的转变中,总是以面向过程的思路思考,发现有很多的不同,今天就稍微发表一下我的见解,如果那里出错,希望大神可以帮忙指出来。

  首先是const :

  在C语法中定义是:由const定义的常量具有不可变性。

  意思是说定义的常量在被赋值后是无法修改的

  {

    const int a = 10;

    a = 20;//如果这样写编译器则会报错,意思就是不能被修改

  }

  本来这样是没有问题的但是无意中我这样写:

  #include <stdio.h>

  #include <string.h>

  #include <stdlib.h>

  int main()

{

  const int a = 10;

  int *b = NULL;

  b = &a;

  *b = 20;

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

  system("pause");

  return 0;

}

  当我通过指针来改变由const修饰的变量是竟然成功了。

  但是在c++中我这样写时

  #include<iostream>

  using namespace std;

  void main()

{

  const int a = 10;

  int *b = NULL;

  b =(int *)&a;

  *b = 20;

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

  printf("*b = %d \n",*b);

  return ;

}

  结果是a 的值仍然是10,但是 *p = 20;

  具体的原因就是在c中可以通过指针修改const所修饰的常量,但是在c++中却不一样,当我们用指针指向const常量是,编译器会自动开辟一块新的区域,而将指针指向这个区域

所以当我们通过指针修改常量的值时可以成功修改,但是打印出来的却不是修改的值,因为指针修改的并不是原来的那块地址了。

  所以我认为c中的const是一个“冒牌货”。

  

posted @ 2017-09-16 16:08  SmartGame  阅读(174)  评论(0编辑  收藏  举报