继续C++——指针,引用和常量限定符const

        个人真的感觉这是一块比较复杂的地方,虽然现在经历的是从C的升迁以及从C#的回归,但是我个人的感觉,C对于指针的描述与应用是相当重要的,而C#中指针的概念已经被淡化了,也就是说,至少是日常的应用开发,很少再使用到指针了。其中C++似乎是个过渡,因为很多人都在将C++中指针是最不建议是用的嚎头。

        首先是概念:
        指针(pointer)是用来指向实际内存地址的变量,一般来说,指针是整型,而且一般的大家会接受十六进制的输出格式。
       引用(reference)是其相应变量的别名,用于向函数提供直接访问参数(而不是参数的副本)的途径,与指针相比,引用是一种受限制的指针类型,或者说是指针的一个子集,而从其功能上来看,似乎可以说引用是指针功能的一种高层实现。

       关于运算符&和*:
       在C++里,沿袭C中的语法,有两个一元运算符用于指针操作:&和*。按照本来的定义,&应当是取址符,*是指针符,也就是说, &用于返回变量的实际地址,*用于返回地址所指向的变量,他们应当互为逆运算。实际的情况也是如此。源引C++大学教程里面的例子:

#include  < iostream.h >

int  main()
{
    
int a;  //a is an integer
    int *aPtr;  //aPtr is a pointer to an integer

    a
=7;
    aPtr 
= a;

    cout
<< " Showing that * and & are inverses of "
           
<<"each other. &*aPtr = " << &*aPtr
           
<< " *&aPtr = "" << *&aPtr << endl;

    
return 0;
}

       运行结果都会是相应的十六位地址。
       然而,在C++的引用中,&被用来声明引用,这里&我个人认为不再是取址的作用,而只是一个代号。

       关于const
       const名叫常量限定符,用来限定特定变量,以通知编译器该变量是不可修改的。习惯性的使用const,可以避免在函数中对某些不应修改的变量造成可能的改动。

       常量限定符与按值调用、按引用调用相结合,共有六种可能:
       两种按值传递参数:非常量数据和常量数据;
       四种按引用调用传递参数:非常量数据的非常量指针,常量数据的非常量指针,非常量数据的常量指针,常量数据的常量指针。这四种传递方式,“非非”的访问权限是最高的,“常常”的最低。
       这里主要的是区分常量指针和常量数据。下面是分别两者的定义:


        
const   char   * sPtr;         // sPtr is a pointer to the constant char variable
        
        
char   *   const  Ptr;          // Ptr is a constant pointer to the (non-constant) char variable

      最简单的理解方式,我个人认为,主要是理解const的功能:锁定它所修饰的变量的值,以便其不会被修改。所以,当const修饰指针时,指针是不可修改的(例如,const修饰一个数组名,这样就不能使用对数组名进行加减运算来移动数组指针);当const修饰变量是,变量的值是不可修改的。其实,在这里,我觉得指针和变量应当都看作是变量来处理。

      实际的应用中,const结合存储类、作用域的使用,下次再好好补上,这次时间太赶,先写一些笔记出来,以免后边忘记了。

PS: 强烈批判这个该死的微软拼音!难道随着版本的升级,变得越来越傻了?看不出它跟了我这么长时间,从我的输入里面学了什么东西出来,每次还得自己手选……考虑是不是该学五笔了……
PS: PS: 我不知道其他的各位有没有感觉,csdn的write blog功能里面的后台应该是不是有什么检测程序(用js写的输入验证一类的),每次输入字符都会检测,以至于有时候会出现假死的现象。准备下次在Firefox里面用js console看一下。动不动就像死机一样,很不爽的啊……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值