#include<iostream>
using namespace std;
/**
* @brief main
* @return
* 1、常量指针:表示这个指针是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。
* const int * c=&m;或者 int const * c=&m;
*
* 2、指针常量:指针变量不可以修改,但是它指向的内存空间的值可以修改。
* int * const d=&n;
*
* 3、指向常量的常量指针:指针变量不可以修改,并且指向的内存空间也不可以修改。
* const int * const d=&n;
*
* 4、c语言的const 是一个冒牌货,可以通过指针,进行修改。在c++中不可以修改。在c++中是一个真正的常量。
* 好处:
* 1、指针做函数参数可以提高代码的可读性,减少bug
* 2、清楚的分清参数的输入和输出的特性。
*
* 结论:
* 1、在c 语言中,编译器会给const 修饰的成员变量分配内存空间。
* 2、在c++中,可能分配内存空间,也有可能不分配内存空间。
* 当const 作为 全局变量。供其他文件使用的时候分配内存。
* 当使用取地址符号的时候取const 常量地址的时候,会分配内存空间。int *p=(int *)&a; 会给 a分配一个内存空间,并且p指向这个内存空间。
* 其余的时候const 是被存储在 符号表中,不会分配内存空间。
*
*/
int main(){
const int a=10;
int const b=20; //这个两者是等价的。 存在于符号表
int *p=(int *)&a; //1、在 c 语言中const 修改的 变量是假的,可以通过指针修改。在c++中就不会修改常量的值。
*p=30;
cout<<a<<endl; //
cout<<*p<<endl; //指向a 的时候,会单独开辟一个内存空间,存取 *p的值。
int m=10;
int n=20;
const int * c=&m; //c 是一个常量指针;指针变量可以修改,但是它指向的内存空间m 的值不可以修改。
// *c=30; 指向的内存空间的值,不能够修改。
c=&n; //指针变量可以修改。
int * const d=&n; //d 是一个指针常量; 指针变量不可以修改。 但是它指向的内存空间不可以修改。
// d=&m; //指针变量不可以修改。
*d=100; //指向内存空间的值可以修改。
}
struct teacher
{
int age;
char name[20];
};
/**
* @brief opearNum
* @param p
* @return
* 常量指针
* 指针指向的内存空间不能够被修改
*/
int opearNum(const teacher *p){
// p->age=10; //错误
p=NULL;
return 0;
}
/**
* @brief opearNum
* @param p
* @return
* 指针常量
* 指针变量本身不能够被修改
*/
int opearNum2( teacher * const p){
p->age=10;
// p=NULL; //错误
return 0;
}
/**
* @brief opearNum
* @param p
* @return
* 指向常量的常量指针
* 指针变量本身不能够被修改,指向的内存空间也不能够被修改。
*/
int opearNum3( const teacher * const p){
// p->age=10; //错误
// p=NULL;
return 0;
}
const 基本用法
猜你喜欢
转载自blog.csdn.net/qq_30272539/article/details/81380986
今日推荐
周排行