【ThinkingInC++】39、const的传递和返回地址

指针的const有两种:const修饰指针正指向的对象,或者修饰指针里面存储的地址。

/**
* 书本:【ThinkingInC++】
* 功能:const的传递和返回地址
* 时间:2014年9月7日14:11:41
* 作者:cutter_point
*/

//参数为非const类型的
void t(int*){}

//参数是const类型的
void u(const int* cip)//cip是一个指针,指向const的int数据
{
    //! *cip=2;     //非法操作,由于cip指向的值是被const修饰的,无法改变
    int i=*cip;     //拷贝数值,OK
    //! int* ip2=cip;   //非法操作,不能把const数据赋值给非const类型的
}

//返回const类型的指针地址
const char* v()
{
    return "cutter_point--char* v()";
}

//返回const地址且const值的类型
const int* const w()
{
    static int i;
    return &i;
}

int main()
{
    int x=0;
    int* ip=&x;
    const int* cip=&x;
    t(ip);
    //! t(cip); //不能把const的数据当参数赋值给非const的函数
    u(ip);
    u(cip);     //由于是参数拷贝机制,所以const的参数可给const类型和非const类型
    /*
    如果传递或返回一个地址(一个指针或一个引用),客户程序员去取地址并修改其初值是
    可能的。如果使这个指针或引用成为const,就会阻止这类事的发生,地址const返回
    就是返回一个const指针就不能赋值给非const
    */
    //! char* cp=v(); //函数v()的返回值只可以被赋给一个const指针,指针的值是const
    const char* ccp=v();
    //! int* ip2=w();   //w()的返回值是const的
    const int* const ccip=w();
    const int* cip2=w();     //这个也是可以,我也是醉了,C++果然神秘莫测

    return 0;
}
时间: 2024-09-29 22:50:53

【ThinkingInC++】39、const的传递和返回地址的相关文章

const 值传递和引用传递

const关键字,我们用const修饰的变量表明该变量的值以后不可以修改,即相当于常亮,并且在定义的时候应当初始化. 如:const int n = 0; 这和 int const n = 0;是等价的 extern修饰:extern的原理很简单,就是告诉编译器:"你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!" 所以和一般的extern用法没有区别: file1 extern const int n = 1; //定义并初始化

c++ static及const(开发者在线)

static 是c++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因.作用谈起,全面分析static 修饰符的实质. static 的两大作用: 一.控制存储方式: static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间. 1.引出原因:函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用

C++ const用法小结 (欢迎大家拍砖)

C++const 关键字小结 const 是constant的缩写,本意是不变的,不易改变的意思. const 在C++中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数. 一.const修饰普通类型的变量. 如下: 1 const int a = 7; 2 3 int b = a; //it's right 4 5 a = 8; // it's wrong, a被定义为一个常量,并且可以将a赋值给b,但是不能给a再次赋值.对一个常量赋值是违法的事情,因为a被编译器认为是一个常量,

#define\const\inline的区别与联系

总结: const用于代替#define一个固定的值,inline用于代替#define一个函数.是#define的升级版,为了消除#define的缺陷. #define和inline 的区别 define:定义预编译时处理的宏:  只进行简单的字符替换,无类型检测 typedef:定义类型别名 用于处理复杂类型  例: typedef int A:  则:A a: //定义a为int inline: 内联函数对编译器提出建议,是否进行宏替换,编译器有权拒绝 既为提出申请,不一定会成功 stat

const的使用总结(转载)

C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助. Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的. 一.Const作用    如下表所示: No. 作用 说明 参考代码 1 可以定义const常量 const int Max = 100; 2 便于进行类型检查 const常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行

概览C++之const

1.C语言中const与 C++中的const void main() { const int a = 10; int *p = (int*)&a; *p = 20; printf("%d", a); } 比較上述代码在C中和C++中执行结果:C:打印20:C++:打印0. 由此可见,C语言中的const是个"冒牌货",C++中 的const是一个真正的常量. 原因:C语言直接为a分配了内存. C语言中的const变量是仅仅读变量,有自己的存储空间.而C++

const

C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助. Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的. 一.Const作用    如下表所示: No. 作用 说明 参考代码 1 可以定义const常量 const int Max = 100; 2 便于进行类型检查 const常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行

const 的全面总结

C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助. Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的. 一.Const作用    如下表所示: No. 作用 说明 参考代码 1 可以定义const常量 const int Max = 100; 2 便于进行类型检查 const常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行

c++中const关键字全面总结

一.const作用 1.const定义常量 注意:const只对它左边的东西起作用,唯一的例外就是const本身就是最左边的修饰符,那么它才会对右边的东西起作用. (1)const修饰变量,以下两种定义形式在本质上是一样的.它的含义是:const修饰的类型为TYPE的变量value是不可变的. TYPE const ValueName = value; const TYPE ValueName = value; (2)将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初