首页 技术 正文
技术 2022年11月15日
0 收藏 860 点赞 3,568 浏览 1667 个字

Date:

2014-1-1

Summary:

const 修饰符笔记

Contents:

1.const 修饰符

声明一个常量数据类型 , 在编译时就确定数据类型

2.const 与 指针

一般情况会有两种: const 在 *的左边或者右边

(1)const 在 * 左边

则无法通过该指针修改其指向的内存的值

ex:

int num = 10;

const int* p = #

//如果(*p)++ ,则编译器报错

(2)const 在*右边

则无法让该指针指向其他内存空间

int num1 = 10;

int num2 = 20;

int* const p = &num1;

//如果 p = &num2,则编译器报错,但是可以(*p)++

3.const 与函数参数

尽量把函数的形参声明为const指针,这样的好处:

(1)函数的实参可以使用const指针和非const指针,否则函数不接受const指针

(2)函数内部不能修改const指针指向的数据,避免函数内部污染数据

Notes:

Nothing Here

Sample:

 /**
* 普通方法
*
* @param nNum1 nNum1 description
* @param nNum2 nNum2 description
*
* @return return value description
*/
int add1(int nNum1,int nNum2)
{
return nNum1 + nNum2;
} /**
* 形参为 非const指针
*
* @param pNum1 pNum1 description
* @param pNum2 pNum2 description
*
* @return return value description
*/
int add2(int* pNum1,int* pNum2)
{
return (*pNum1) + (*pNum2);
} /**
* 形参为 const指针
*
* @param pNum1 pNum1 description
* @param pNum2 pNum2 description
*
* @return return value description
*/
int add3(const int* pNum1,const int* pNum2)
{
return (*pNum1) + (*pNum2);
} int main(int argc, const char * argv[])
{ // insert code here...
std::cout << "Hello, World!\n"; cout << "test 1 start." << endl; int num1 = ;
int num2 = ;
int* p1 = &num1; cout << "num1 : " << num1 << "\n" << "pNum1 : " << (*p1) << endl;
cout << "add self by pointer :" << endl; (*p1)+=; cout << "num1:"<< num1<< endl;
cout << "use const pointer \n\n\n" << endl; const int* p2 = &num2;
p1 = &num2;
(*p1)++;
// (*p2)++; //note:编译器报错,不能修改num2内存中得值
p2 = &num1; //note:p2的指可以被修改,即可以指向其他内存空间 int* const p3 = &num1;
(*p3)++;
// p3 = &num2; // note:编译器报错,不能修改p3的值,即永远指向num1的内存空间 cout << "test 2 start." << endl;
cout << "call [add1] method :" << add1(num1,num2) << endl; // 使用非const的指针作为实参
cout << "call [add2] method :" << add2(p1,p1) << endl; // 使用const的指针作为实参,编译报错
// cout << "call [add2] method :" << add2(p1,p2) << endl; // 在add3,由于形参的指针被const修饰,则实参可以接受 const指针 和 非const指针
cout << "call [add3] method :" << add3(p1,p2) << endl; return ;
}

 

THE END

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,494
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,295