你不知道的事 之 C++ 指针和引用“是什么鬼”

指针,简单的说就是在一个变量中存放地址值,那么这个变量就是指针;引用,就是给内存地址一个别名,当然这个内存地址之前已经被取过名字了。

指针大小,和机器的寻址线数相关,也和操作系统相关;比如说如果你的机器是64位机,但是你装的系统是32位系统,那么你的指针变量的大小应该还是4byte吧?没有验证过,只是猜想,有同学验证过,欢迎讨论。

引用大小,和其引用的变量相关,其实你就把引用当成正常的变量使用就对了,只不过这个引用变量和另外一个变量都是同一块内存的名字罢了。

区别:

指针,可以被修改,也就是一个指针变量内部存的指针地址可以被修改为其他的地址值。而引用指正在初始化的时候引用到另外一块内存,之后就改变不了了,这个改变不了是指你不能把这个引用引用到另外的一块内存去了,你在程序里面试试这样修改就知道为什么做不到了。

const int* a; 常量指针,说明这个指针指向一个常量的地址,这个指针指向的内存空间的值不能修改哦。

int* const b; 指针常量,说明这个指针变量不能被修改了,也就是说你不能把这个指针变量重新赋值哦,你不能让他指向别的内存地址了哦。

const int& c; 常量引用,这个别名是给一个常量所在内存块取得哦,你就不能改变这个内存块的内容了哦。

int& const d; 引用常量,这个本身不存在哦,在程序里面这样写通过不了编译哦。因为引用本身就是作为另一块内存的别名了,也做不到的哦。

就这么一些了呢,比起别人写了一大堆,这个还算简洁了吧。。。

时间: 2024-10-01 07:22:43

你不知道的事 之 C++ 指针和引用“是什么鬼”的相关文章

c++中指针的指针和指针的引用的使用

当指针作为函数的参数进行传递时,实际上本质上是安置传递,即将指针进行了一份拷贝,在函数的内部对这个指针的修改实际上就是对一个在函数内部的那个局部变量的修改.这点事和引用不同的,引用实际上是在参数传递时,将实际变量的地址传了进去,在函数内部访问这个变量时,实际上是使用间接访问的方式来进行了的,所以实际上就是访问了元变量.但是由于只是将地址进行了拷贝,所以对这个指针所指向地址的修改不会对原有的指针产生影响.若果要实现对指针的修改,需要使用指针的指针或者指针的应用进行传递. 一.指针的指针 int v

JavaScript 你不知道的事 -- 关于函数

接上篇Javascript 你不知道的事,直接条列了: 每个函数创建时默认带有一个prototype属性,其中包含一个constructor属性,和一个指向Object对象的隐藏属性__proto__.constructor属性的值为该函数的对象.在一个函数前面加上new来调用,则会创建一个隐藏连接到该函数prototype成员的新对象(由__proto__属性来链接),同时函数的this将会被绑定到那个新对象上. 函数总是返回一个值:如果没有指定返回值,就返回undefined:如果当做构造函

C++的那些事:你真的了解引用吗

一.引用的本质是什么 说到引用,一般C++的教材中都是这么定义的: 1,引用就是一个对象的别名. 2,引用不是值不占内存空间. 3,引用必须在定义时赋值,将变量与引用绑定. 那你有没有想过,上面的定义正确吗?编译器是如何解释引用的? 这里先给出引用的本质定义,后面我们再进一步论证. 1,引用实际是通过指针实现的. 2,引用是一个常量指针. 3,引用在内存中占4个字节. 4,在对引用定义时,需要对这个常量指针初始化. 二.探究本质 我们从最简单的变量的定义开始,看编译器会做哪些事情. int va

指针与引用的二三事

指针:一个储存一个地址的整型对象,即一个整数,以指针所存地址开头,指针类型对应类型那么大(如char指针对应内存大小为1个字节)的那块内存,我们称作指针所指内存,编译器根据指针的类型操作指针指向内存. 引用:作为一个对象的别名,对引用的所以操作均可看做对其绑定对象的操作,并且引用在定义时必须初始化,且此后不能再改变它. 对于指针,有两种const. 1:constant pointer 常量指针,即指针本身即为常量.也就是不可以修改指针本身,指针像引用一样,初始化以后,从一而终. 2:point

从Java到C++——指针与引用

C++即有指针又有引用,而且很多时候具有相似的功能,常常容易让人混淆,着实让人头痛.用两句通俗的话说明两者本质的含意:引用就是一个变量或对象的别名(引用的本质是一个对象):指针是一个段内存空间的地址(指向存储一个变量值的空间或一个对象的空间):如下图所示:     C++中的引用与指针 引用 引用是为变量或对象起的另外一个别名,定义形式:T& v;  T为类型,v为变量名.使用引用时,注意以下几点: 1.引用在创建的时候必须被初始化(指针可以在任何时候赋值) 2.一旦引用初始化后,就不能改变引用

C++指针参数引用

粘个代码占位置,以后有时间把指针函数,函数指针都补上 #include <iostream>using namespace std;void freePtr1(int* p1){    /*未释放内存前 ->  p1 Address : 0012FDDC  p1 value : 003429B8,     在这里,p1它也是一个变量,既然是一个变量,     那么它将会以值的传递,把外部变量p1传到栈内,在栈内产生一个地址:0012FDDC,     当然,它的值不会变仍然是指向堆地址:

c++指针与引用问题

本来是回答问题的,到这里做个笔记 *&L是指针的引用,实参是个指针.所以L是实参指针的别名,对别名L的修改,等于对实参的修改.*L是传值,你无法改变传过来的实参指针变量的值程序代码: #include<iostream>using namespace std;void foo(int*p);int main(){    int a=5;    int *b=&a;    printf("%d %d\n",b,*b);    foo(b);    printf

(C/C++)区别:数组与指针,指针与引用

1.数组跟指针的区别 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变. 指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存.指针远比数组灵活,但也更危险. 数组和指针特点的简单比较: 数组 指针 保存数据 保存地址 直接访问数据 间接访问数据,先取得指针的内容,然后以它为地址取得数据 用于存储数目固定且类型相同的数据 通常用于动态数据结构 编译器自动分配和删除

指针与引用同与不同

一.指针与引用的定义及特性 A.引用(reference):为一个已经存在的对象另起一个名字.它有以下特性: 1.必须初始化 2.始终指向同一个对象,不能更改其所指向的对象 3.自身只是一个别名,不占内存,对其取地址是其指向对象的地址 4.常量引用的意义在于不能通过引用来修改其所指向对象的值,其所指对象可以不是常量 int tempA = 2; const int ctempA = 2; /*1.正常使用*/ int &refA = tempA; const int &crefA = ct