博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017.2.15
阅读量:5132 次
发布时间:2019-06-13

本文共 1806 字,大约阅读时间需要 6 分钟。

1.引用用法:

     别名,必须初始化,不允许重定义。

     引用初始化两种=,()

    1.左值引用

       1.做函数参数,改值

       2.引用一个指针,在函数内部可以改变指针的指向,还可以改变指针的值。

1 int *p1=new int;2 int *p2=new int;3 int *& p3=p1;  //指针的引用,指向同一块内存4 *p3=100;     //改变值5 p3=p1;       //改变指向

       3.左值引用是用指针实现的。

       4.引用做返回值,不能返回栈上的数据,可以返回堆,静态区的数据

1 #include
2 #include
3 int * & data() 4 { 5 int *p; 6 p=new int; 7 *p=10; 8 int *& rp=p; 9 return rp;10 }11 12 13 int main()14 {15 int *&rc=data();16 std::cout<<*rc<
View Code

       mingw下g++编辑结果为10 10

       ubuntu下g++编译结果为10 0

       vs2015编译结果为 10  257909260

    2.右值引用

        待补

2.const用法:

       1.c与c++ const对比

          c中的const量,只是一个可读的变量,可以通过强制转换其指针来改变值。

1 #include
2 3 int main() 4 { 5 const int c=0; 6 int * p=(int*)(&c); 7 *p=1; 8 printf("%d\n",c); //用gcc编译c=1,用g++编译c=0 9 }

        c中const量不能用于数组

1 const int d=8;2 int len[d];              //c error,c++可以

        c++ const的强制转换方法:

1 int *p = const_cast
(&a);
View Code

       c++常量强制转化后修改不变,是因为没从内存读取,而是直接读常量表,但是内存中的值已经修改。

1 #include
2 3 4 int main() 5 { 6 const int a = 0; 7 std::cout << &a << std::endl; //006FFDAC 8 int *p = const_cast
(&a); 9 *p = 4;10 std::cout << a << std::endl; // 011 std::cout << *p << std::endl; // 4 内存已经修改12 std::cin.get();13 }

       2. 指向常量的指针和常指针

1 const int *pointer 2 int *const pointer

           c++强类型转换一般约束只会增强,不会削弱。

           比如:

1 int a=0;2 const int b=0;3 const int *pointer(&a)   //正确4 const int *pointer(&b)   //正确5 int *cosnt pointer(&a)   //正确6 int *cosnt pointer(&b)   //错误

           3,4两行无论是const还是非const变量的地址,对于指向常量的指针都无关紧要。

           而第6行,把const变量的地址赋给常指针(可以修改值),类型转换某种意义上是削弱了,不能通过const变量的地址来修改值。

3.new/delete:

           delete不能delete两次(同free)

1 int *p=new int[10];2 3 ....4 5 delete []p;
View Code

            ::new/::delete 全局

            

   

 

  

 

    

 

转载于:https://www.cnblogs.com/acliang/p/6403388.html

你可能感兴趣的文章
关于foreach
查看>>
nodejs的req取参req.body,req.params,req.query
查看>>
《BUG创造队》作业9:【Beta】冲刺 Scrum meeting 1
查看>>
Opencv3 Robert算子 Sobel算子 拉普拉斯算子 自定义卷积核——实现渐进模糊
查看>>
有关宏定义一题
查看>>
JDK/JRE/JVM之间的关系
查看>>
旋转矩阵、旋转向量(轴角)、四元数、欧拉角之间相互转换的代码实现(利用Eigen实现)...
查看>>
ios应用提交审核出现的问题总结
查看>>
android知识杂记(一)
查看>>
从头推导与实现 BP 网络
查看>>
周末计划-20171028
查看>>
mysql查询语句出现sending data耗时解决
查看>>
form表单
查看>>
Centos修改默认网卡名
查看>>
sql server2012中使用convert来取得datetime数据类型样式(全)
查看>>
noip2012借教室
查看>>
实现类似add(1)(2)(3)的效果
查看>>
期中总结
查看>>
冲刺四
查看>>
谷歌技术"三宝"之BigTable(转)
查看>>