• 《好学的C++ 第2版》 第6章 指针--我知道数据在哪里


    指针就是容纳着一个地址的变量。利用指针来减少数据复制,以及更改原始数据,还可以在内存里构造出链表和内部网络等复杂数据结构。

    每种计算机体系结构使用的地址都有某一固定的宽度,能一眼看出某个地址是否过大以至于不适用某个特定的计算机,这种能力很重要。

    目前电脑的物理内存已经超过了32位地址的寻址范围(40亿多),需要操作系统的码农去弥补这个差距。迟早64位体系结构成为主流,会支持近乎无穷的地址数量。

    除了数组和类意外,不要对变量在内存里的位置做出假定。

    星号操作符被称作间接操作符。

    int arr[5]; int* p=arr;//arr是保存着数组第一个元素地址的常量(it:指针常量),值不能被改变,但变量指针p可以获取它的值。c++把数组名解释为地址表达式,arr[3]即*(a+3)

    指针运算规则:

    地址表达式+整数

    整数+地址表达式

    地址表达式-整数

    地址表达式-地址表达式

    地址之间可以进行大小比较(但数组以外的数据类型在内存中的顺序不能保证)。

    编译器完成以下转换:

     新地址=旧地址+(整数*基类型的单位长度)

    用指针会比用数组下标执行稍微快一点。尤其是遍历,指针每次只执行两个加法(循环变量递增与指针递增。更快的方法是先保存pmax=p+len,然后遍历条件是p<pmax,都不用循环变量),而数组要执行一次乘法和一次加法。

    it:为何给函数传入数组参数时,往往同时传入数组大小:只有这样才能遍历地完整地处理数组。

    想给函数传递一个数组,只需传递该数组的名称即可。函数会获得第一个元素的地址并把它当做指针来对待。//it: 函数入参int* a与int a[]有无区别?a是常量指针还是变量指针?

    *与++优先级相同,但它们都是从右往左结合,因而*p++等价于*(p++)

  • 相关阅读:
    发送邮件(公共方法)
    Des加密解密(公共方法)
    星期几以及周,月份天数的计算(共用方法)
    生成随机字符(公共方法)
    MD5函数(公共方法)
    字符串的截取(公共方法)
    AES加密解密
    日期选择控件
    ios CAF音频转换为MP3
    iOS中获取各种文件的目录路径和文件
  • 原文地址:https://www.cnblogs.com/fFaXzz/p/6659853.html
Copyright © 2020-2023  润新知