const在C和C++中的区别

来源:互联网 发布:php实现api接口 编辑:程序博客网 时间:2024/05/24 06:59

个人认为C语言中的const用法比较单一点,在C语言中const只是一个关键字,常用来修饰变量、函数参数及其返回值而被它修饰的变量只能读而不能改变即被const修饰的变量是不可变的。

1)const 修饰一般变量

const int n; //error
const int n = 12;
//right但当这两个一起编译则会出现重定义

所以在用const对一般变量进行修饰时不要出现对名的变量定义。另外const修饰的变量一定要在声明时进行初始化否则当你执行程序的时候就会发现程序有错(函数参数除外)。

2)const与指针搭配混用

①常量指针(const在*左边),例如:const int *p;int const *p;const修饰的是(*p),即是*p所指的内容(一个常量)。也就是*p现在所指的内容以后是不可改变的,但是指向这块内容的指针却是可以改变,即可以有多个指针指向这块内存,但这块内存里面的东西是不可更改的。

②指针常量(const在*右边),例如:int a;int * const p = &a; 在这里const修饰的是p,即p所指的内存是不可改变的,但是p所指的内存里面的内容却是可以改的。

③指向常量的常指针例如:const char* const p = "1234"; const修饰的是指针变量p,即p所指向的内存是不能改变的,const 修饰的是*p,即p所指内存里面的内容是不可改变的。综上:p所指向的内存地址以及所指内存里面的内容都是所不能改变的。


C++中的const修饰完就变成了一个常量而在C语言中修饰完过后它是一个变量。例如:

C语言中:

int main()

{

const int n = 7;

int arr[n] = { 10,232,12 };

}


#include <iostream>
using namespace std;
#include <assert.h>
int main()
{
const int n = 7;
int arr[n] = { 10,232,12 };
cout << arr[2] << " " <<  arr[6] << endl;
}


总结:const 和一级指针的结合  <--->直接或间接可能修改const修饰的常量值
const int* ---> int*  wrong
int* ---> const int*  right
const 和二级指针的结合
const int** ---> int**wrong
int** ---> const int**wrong

#include <iostream>
using namespace std;
#include <assert.h>
int main()
{
const int a = 10;
int *p = &a;
cout << *p << endl;
}



原创粉丝点击