• [Js-c++]c++中的指针、引用和数组名


    指针和引用学了好久,还是偶尔会弄混淆,简单记录分析一下区别吧,有记起来新的区别就不断更新添加进去

    1、指针可以多次重新分配,引用在无法重新分配,而且必须在声明的时候被初始化

    2、指针可以指向空(即被定义为nullptr),但是引用必须指向一个东西

    3、不存在“引用计算”这种东西(但是你用 &d+5 这种的确不会报错,也能算出来东西)

    4、一个指针在堆栈上有自己的内存地址和大小(x86上有4个字节),而引用共享相同的内存地址(与原始变量),但是也占用堆栈上的一些空间。由于引用具有与原始变量本身相同的地址,因此可以安全地将引用视为同一变量的另一个名称。注意:指针指向的内容可以位于堆栈或堆上。同上参考。我在这个陈述中的主张并不是指针必须指向堆栈。指针只是一个保存内存地址的变量。这个变量在堆栈中。由于引用在堆栈上有自己的空间,并且地址与其引用的变量相同。更多关于堆栈vs堆。这意味着有一个编译器不会告诉你的引用的真实地址。

    我们默认的一种规则:

      · 在函数参数和返回类型中使用引用来提供有用和自我记录的接口。

      · 使用指针来实现算法和数据结构。

    有关于数组名和指针:

    表达式中的数组名被编译器当作一个指向该数组第一个元素的指针。

    下标总是与指针的偏移量相同.

    在函数参数的声明中,数组名被编译器当作指向该数组的第一个元素的指针(换言之,在函数调用的时候数组名会退化成指针,但是 sizeof 函数取数组大小的时候不是这样)。

    有关数组名,指针,以及引用的加法:

    数组名和指针都可以做算术运算(但实际上乘除法应该是没有意义的),但是数组名做完运算不能赋值回去,指针则可以(换言之,对于数组不能使用名自增自减运算符)

    假设有一个数组 a[10]

    1 /*   
    2 a:          0012FF20  
    3 &a:         0012FF20  
    4 a+1:        0012FF24  
    5 &a+1:       0012FF48  
    6 */  

    a和&a指向的是同一块地址,但他们+1后的效果不同,a+1是一个元素的内存大小(增加4),而&a+1增加的是整个数组的内存大小(增加40)

    &a取都得是整个数组的地址!既数组名取地址等价于对数组取地址。(而不是想象中的,数组名是指针,给指针取地址就是指针的指针)

    目前还没看到要用到&a这种写法的地方

  • 相关阅读:
    四则运算二
    学习进度
    软件工程个人作业01
    观《构建之法》有感
    软件工程概论课程引言课后作业
    编写一个程序,此程序在运行时要求用户输入一个 整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。
    软件需求与分析课堂讨论一
    软件需求模式阅读笔记一
    我们应当怎么做需求分析
    问题账户需求分析
  • 原文地址:https://www.cnblogs.com/jiasq/p/9200701.html
Copyright © 2020-2023  润新知