永发信息网

引用与指针有什么区别

答案:1  悬赏:20  手机版
解决时间 2021-01-04 06:58
引用与指针有什么区别
最佳答案
问题一:引用和指针有何区别?何时只能使用指针而不能使用引用? 指针是变量的地址,通过指针可以访问到变量所在的内存单元,从而达到改变变量的目的。
例如,现在又变量 int a;a的内存单元地址是 0x2008,我现在定义一个int * p;, p=&a; 那么现在 p 的内容就是 0x2008,我执行 *p=1;就是找到地址为0x2008的 内存单元,并把 1 存入该内存单元。显然结果是 a 的值变成了1。
引用就不一样了。引用相当于起了一个别名。就好像一个人有两个名字,你使用这两个名字的效果是一样的。当引用做函数形参时,函数不再申请临时变量,而是直接使用被引用的变量。
例如:int a=0;
void change (int & b)
{
b=2;
}
change(a);这段代码中的函数 change 形参是引用,调用该函数时,它直接处理变量 a ,因为形参是引用,它直接使用被引用的对象,即 a 。
你说的只能使用指针而不能使用引用的情况我没见过。感觉都可以用,只不过使用的方式不一样罢了。问题二:指针的与“引用”的区别 C++编程中指针与引用的区别一、指针和引用的区别(1)引用总是指向一个对象,没有所谓的 null reference .所有当有可能指向一个对象也有可能不指向对象则必须使用 指针.由于C++ 要求 reference 总是指向一个对象所以 reference要求有初值.String & rs = string1;由于没有所谓的 null reference 所以在使用前不需要进行测试其是否有值,而使用指针则需要测试其的有效性.(2)指针可以被重新赋值而reference则总是指向最初或地的对象.(3)必须使用reference的场合. Operator[] 操作符 由于该操作符很特别地必须返回 [能够被当做assignment 赋值对象] 的东西,所以需要给他返回一个 reference.(4)其实引用在函数的参数中使用很经常.void Get***(const int& a) //这样使用了引用又可以保证不修改被引用的值{}★ 相同点:1. 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。★ 区别:1. 指针是一个实体,而引用仅是个别名;2. 引用使用时无需解引用(*),指针需要解引用;3. 引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终”4. 引用没有 const,指针有 const,const 的指针不可变;5. 引用不能为空,指针可以为空;6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;typeid(T) == typeid(T&) 恒为真,sizeof(T) == sizeof(T&) 恒为真,但是当引用作为成员时,其占用空间与指针相同(没找到标准的规定)。7. 指针和引用的自增(++)运算意义不一样; 二、C++中指针传递与引用传递(进一步整理)从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的:指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。(这里是在说实参指针本身的地址值不会变)而在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。引用传递和指针传递是不同的,虽然它们都是在被调函数栈空间上的一个局部变量,但是任何对于引用参数的处理都会通过一个间接寻址的方式操作到主调函数中的相关变量。而对于指针传递的参数,如果改变被调函数中的指针地址,它将影响不到主调函数的相关变量。如果想通过指针参数传递来改变主调函数中的相关变量,那就得使......余下全文>>问题三:函数形参 引用和指针有什么区别 关于指针和引用的区别,首先要了解变量声明的实质。
先看一个代码
int a=10;该语句其实是在栈上分配了一块内存空间,整数类变量占用4字节,所以这句代码的意思就是分配了一块连续4字节的内存空间,并往该空间存入10 。a代表着这块内存空间的首地址(简称地址,下同),a是个代名,一个标示符,这个名字只存在于源代码,编译之后就是个地址。所以当定义一个变量时,一个变量其实包含两个属性,地址(占用内存空间)和值,名称代表地址,而当执行赋值语句时,编译器默认往a代表的地址中存入数据(存入所在内存空间),而不是改变地址。再看一段代码
int a=10;int &b=a;声明一个整数类的引用,名称为b,如果说变量含有地址和值两个属性,那么引用不能称为变量,它不具备自己所代表的内存空间更没有自己的值,它仅仅就是个代名词,它什么都没有,所谓徒有虚名,没有实质,它只是a的一个别名,或者说它是借用了a的地址和值,当对b赋值或其他访问时,等于直接在访问a。编译之后也是a的地址。再看一段代码
int a=10; int *p=&a;这段代码的后一句声明了一个指针变量,并取a的地址赋值给p,既然是变量,它就包含2个属性:地址和值,与其他变量不同,它专门用于保存其他变量的地址(地址是个无符号整数,没见过门牌号码是负的^_^),此处p所在内存空间存入a的地址,当然p同样代表自己的地址。最后再看段代码
void main(){ int a=10; int &b=a; int *p=&a; fun1(b); fun2(p); cout 问题四:引用与指针有什么区别?! 最大的区别:指针可以为NULL,引用不能引用NULL。 引用是一个对象别名,引用和被引用对象其实就是一个东西,做函数参数不需要不需申请形参内存。问题五:引用,地址和指针有什么区别? 引用,一个变量的别名,为什么引入别名呢?原因是我们想定义一个变量,他共享另一个变量的内存空间,使用别名无疑是一个好的选择。变量是什么?是一个内存空间的名字,如果我们给这个内存空间在起另外一个名字,那就是能够共享这个内存了,引用(别名)的由此而来。
指针,指向另一个内存空间的变量,我们可以通过它来索引另一个内存空间的内容,本身有自己的内存空间。
二者区别:
引用访问一个变量是直接访问,而指针是间接访问。
引用是一个变量的别名,本身不单独分配自己的内存空间,而指针有自己的内存空间。
引用在开始的时候就绑定到了一个内存空间(开始必须赋初值),所以他只能是这个
内存空间的名字,而不能改成其他的,当然可以改变这个内存空间的值.
例如
int i = 3,j = 4;
int &x = i;//成为i的别名
x = j;//不能否认x仍然引用i,并没有成为j的别名,只是修改了x和j共享的内存空间的值.
这点与指针不同,指针在任何时刻都可以改变自己的指向问题六:C语言中指针和引用的区别 ct9789:
你好。
指针: 其实指针这个概念在谭浩强的这本书上是这样说的,指针就是地址,指针值就是地址值。指针变量就是存放指针的
变量,所以一定不要将指针与指针变量搞混淆了。指针仅仅是一个地址值,而指针变量就是存放指针(也就是地址的变量)
指针的定义:
例如整型指针: int *p;p是一个指向int类型数据的指针变量。里面存放的地址(也就是指针)是一个int类型变量的地址。指针变量时
有类型的,例如p的类型就是int *表示p是一个指向int类型的指针变量。如何知道一个指针变量的类型呢,最简单的方法就是去掉变
量定义语句中的变量名,剩下的部分就是其类型,这种方法适用于所有的变量定义,例如int a;a的类型是int 。 int b[10];b的类
型是int[]表示是一个数组(关于数组类型这里不谈,因为这个问题很微妙,其实在c、c++中没有数组类型这个概念,包括函数类型也
是一样的),int *c;c的类型是int *。int ** d;d的类型就是int **;所以通过这种方法来判断一个变量的类型是很方便的。
说道指针变量,我们必须说到得有几个方面。
1.指针类型。
这个很重要,一个指针是有类型的,也就是一个地址是有类型的。具体说是某一个地址会指向不同类型的数据,这是不一样的,例如
int *p;p是指向int型数据。 double*p1;p1是指向double型数据。但是p和p1本身在内存中占用的空间是4个字节(对于32位的系统来说
),如果是在TC中编译c程序,应该是2个字节了(dos操作系统是16位的)。有人说地址不就是一个值吗,类似于0xfffdddcc这样的地址
数值,为什么还分什么类型呢,我要说的是这个关系很大。我们知道指针是有运算的,int *p=&a;那么p++到底加了多少呢,不要以为
是将p里面的地址值加了1,这是完全想当然。实际上加了sizeof(int)这么多个字节。也就是说加了一个int元素应该占用的字节,这
样在数组中我们可以通过这种方式从上一个元素很方便的让指针变量指向下一个元素。p+5的话实际上是加了p+sizeof(int)*5这么多
个字节。 另外一点事指针的类型决定了当指针解引用的时候其所以指向的内存单元中的二进制数据如何解释的问题。例如int *p=&a;
那么(*p)取得的数字就是一个整型数据,如果(*((char *)p))得到的就是一个字符型数据了。p本来指向的是int型数据(有4个字节)的
首地址,如果将其强制转换为一个指向char类型的指针变量,那么在解引用的时候只取第一个字节的数据,并将其解释为一个ascii码
代表的字符。 还有如果是一个指向函数的指针变量,我们可以通过此指针变量直接调用函数。例如int(*function)(int);此时
function指向一个函数,此函数具有一个int参数,返回一个int值。那么通过指针可以这样调用该类型的函数了int a=function
(100); 或者int a=(*function)(100);其实要不要解引用都是可以的。不过以前是需要解引用的,现在c标准规定这两种方法都可以。
总的来说指针的类型很重要。
2.指针与数组。
我们向一个函数传递数组的时候一般是传递数组名,我们知道数组名是一个代表数组中第一个元素的地址并且数组名是不可以当左值
的。其实你又没有想过数组名到底是什么呢。有人说其实数组名就是一个指针常量,是一个不可以改变的指......余下全文>>问题七:引用和指针的区别 从现象上看:指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。引用访问一个变量是直接访问,而指针是间接访问。2.从内存分配上看:程序为指针变量分配内存区域,而引用不分配内存区域
3.从编译上看:程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改问题八:c++引用类型和指针类型的区别 能用引用完成的都可以用指针完成.
能用指针完成的不一定能用引用完成.
引用正是屏蔽了指针 不安全 但却 功能强大 的那部分.
引用不能为空,
所以在程序中的引用都是有值的,不必检查该引用是否为空。
而指针则可以为空。你可以定义一个指向NULL的指针,这就是和引用的最大区别,
所以在程序中使用指针之前必须检查该指针是否为空
区别主要有三条
1、引用必须初始化,指针可以任何时候初始化
2、引用后不能再引用其他对像,指针则可以
3、引用不能为空,指针可以为空(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。问题九:c++中引用和指针的区别,引用的优势在哪? 先搞清楚命名和指针的区别,命名说白了只是在语言层面的东西,代码经过编译器变异后,命名是没有任何作用的。指针是的确存在的东西,经过编译器编译后,是需要分配内存空间的,这个就是2个最大的区别。通常情况下,一个空间对应一个命名,引用可以给一个空间同时命名多个命名;指针是用变量保存一个地址信息,一个指针变量一个时刻只能保存一个地址信息。问题十:可以谈一下C++引用指针和指针引用的区别吗 是找的别人的回答:
指针和引用的联系与区别
★ 相同点:
1. 都是地址的概念;
指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
★ 区别:
1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在定义时被初始化一次,之后不可变;指针可变;
4. 引用没有 const,指针有 const;
5. 引用不能为空,指针可以为空;
6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
7. 指针和引用的自增(++)运算意义不一样;
8.从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。
具体请参考资料:
blog.csdn.net/...1.aspx
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
蕲春县青石工商局地址在哪?我要去那里办事
传感器广泛应用在我们的生产生活中,常用的计
重庆文理学院2014-2015学年下半学期国家助学
Hedoesn’tlack______tolearn.Youdon’thavet
三门有什么地方好玩
蕲春县工商行政管理局漕河分局地址有知道的么
梦见挖坑种树
两个数相乘的积是432,如果一个因数除以2,另
单选题在地球仪上能画出多少条纬线在地球仪上
一头牛重605千克,大象的体重是牛的8倍,大象
有一首歌,刚开始是一只鸡在叫,挺逗的!叫什
王朝葡萄酒多少钱一瓶
单选题养鱼缸里经常要放一些新鲜的水草,这样
如本题图所示,这是我国四所著名大学的校微图
阅读表达(共5个小题,每小题2分,共10分)Wh
推荐资讯
单选题下列运动过程属于平移的是A.荡秋千勒B.
街机游戏忍者棒球的几个新手问题!
“句”字作姓怎么读?请附上依据
黑豆粉我每天早餐吃一杯可以吗
电脑上怎么查WLAN密码
克隆羊多莉长得像A.具有A、B、C三种羊的特点B
如何写好文章标题
天津市河北区公证处地址有知道的么?有点事想
玉米是一种雌雄同株的植物,其顶端开雄花,中
经济全球化对我国既有机遇,也是挑战。下列看
2010年青海玉树地震发生后,地震预报再次成为
单选题法国1875年宪法修正案宣布:“凡曾经统
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?