const在C和C++中的区别
2017-10-19 22:01
155 查看
个人认为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
= { 10,232,12 };
}
#include <iostream>
using namespace std;
#include <assert.h>
int main()
{
const int n = 7;
int arr
= { 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;
}
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
= { 10,232,12 };
}
#include <iostream>
using namespace std;
#include <assert.h>
int main()
{
const int n = 7;
int arr
= { 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;
}
相关文章推荐
- C++中static_cast、const_cast、reinterpret_cast的用法举例,附带举例说明强制类型转换时int和int&的区别
- 【转】java中的final与C++中的const的区别
- C++进阶—>const、define和enum的区别和用途
- 【从C到C++学习笔记】引用/const引用/引用传递/引用作为函数返回值/引用和指针的区别
- const在C与C++的区别
- C / C++ const 的区别和使用
- C语言中const和C++中的const 区别详解
- C++常见面试题(一)C/C++区别 const用法
- C++(typedef、一维数组转成二维数组、C和C++区别、成员地址成员指针、构造析构函数、this指针、const用法、显示时间、const用法)
- const在C和C++中的区别
- C++ 中临时对象 和 const 对象 的一个区别
- C/C++中static用法详解及其与const的区别
- C/C++的区别(默认值、内联函数、函数重载、const、引用、参数、返回值)
- 【C++】#define和const的区别
- C++ static const 及 声明和定义的区别
- const在C与C++中的区别
- const 在c和c++中的区别
- C++ 中const和static的区别
- c++类型转换static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较,显示转换,隐式转换
- C++中const与#define的区别