首页 > 试题广场 >

引用和指针有什么区别?

[问答题]
引用和指针有什么区别?
相同点:
    引用和指针都是地址的概念,引用是一个内存对象的别名,指针指向一个内存对象,保存了这个对象的内存地址。
区别:
1.引用不能为空,即不存在对空对象的引用,指针可以为空,指向空对象。
2.引用必须初始化,指定对哪个对象的引用,指针不需要。
3.引用初始化后不能改变,指针可以改变所指对象的值。
4.引用访问对象是直接访问,指针访问对象是间接访问。
5.引用的大小是所引用对象的大小,指针的大小,是指针本身大小,通常是4字节。
6.引用没有const,指针有const
7.引用和指针的++自增运算符意义不同。
8.引用不需要分配内存空间,指针需要。
发表于 2015-06-12 08:56:15 回复(4)
引用就是指针,不是什么别名,它会占用内存,和指针的区别在于引用必须被初始化,在使用它的时候编译器会自解引用,所以引用就是自解引用的指针。
int a = 1;
int &b = a;    //汇编语言等价于int *b = &a;
cout<<&a<<endl;
cout<<&b<<endl;    //汇编语言等价于cout<<&(*b)<<endl;


发表于 2015-09-01 10:34:52 回复(1)
引用会分配内存空间,大小与指针相同,内容为被引用对象的内存地址。也就是说,引用和指针在内存上表现一样的,区别在于编译器在编译时对引用和指针做了不同处理。 


GCC也是一样的
编辑于 2015-08-29 14:07:50 回复(1)
1.引用是变量或对象的别名,不占用内存空间,指针会分配内存,保存的是地址; 2.引用对象不可以为空,指针可以为空; 3.引用在声明时需要初始化,指针可以不初始化; 4.引用对象一旦绑定就不可以改变,如果改变只改变引用对象的值,指针可以改变所指的对象,也即指针可以指向下一个对象;
发表于 2018-04-06 22:32:32 回复(0)
根据引用和指针的定义展开:
引用是某个变量或者对象的别名,而指针则存储的是一个机器码地址,这个地址是某个具体变量或者对象的地址,因此区别有:
1)指针可以为空,但是引用不行
2)声明指针可以不指向任何对象,因此使用指针之前必须做判空操作,而引用则不必
3)引用一旦声明后,就不可以改变指向;但是指针可以,如++操作符,指针则指向下一个对象,而引用则改变的是指向对象的内容
4)引用的大小是所指变量的大小,而指针仅仅是个机器码
5)引用形式上漂亮
6)引用比指针安全,而指针的指向很灵活,容易产生野指针,比如多个指针指向一块内存,free掉一个,别的指针就成了野指针。
发表于 2015-06-18 13:26:02 回复(0)
参见常见C/C++笔试面试考点:http://www.cnblogs.com/webary/p/4754522.html
发表于 2015-09-05 17:37:46 回复(0)
引用:别名。
指针:地址,值。
区别:
1.引用不能为空,指针可以。
2.引用初始化必须有引用对象,指针可无。
3.引用一旦初始化后,不能改变。指针可以。
4.引用的内存大小为被引用的对象大小,指针为4个字节(32位)。
5.引用不能const,指针可以const。
6.引用直接访问,指针间接访问。

发表于 2015-07-26 10:28:23 回复(0)
1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。
4)引用访问对象是直接访问。指针访问对象是间接访问。
发表于 2015-06-11 16:14:18 回复(0)
引用必须被初始化,而指针不需要
不存在空值的引用,但指针可以为空(引用是对象的别名,引用为空,对象不存在,怎么会有别名,故定义一个引用的时候,必须初始化
引用一旦被初始化就不能改变,指针可以改变所指的对象
引用的大小是所指对象的大小,因为引用只是一个别名而已,但是指针的大小是指针本身的大小,4个字节
最后引用比指针更加安全,因为不存在指向空值的引用,并且指向一个对象之后就不能改变,相反,指针总是应该被检查的,以防止其为空。
指针和引用的自增(++)运算意义不一样
发表于 2015-05-30 08:37:38 回复(0)
相同点: 其实都是地址的概念;引用内部实现是用指针的 指针指向一块内存,他是一个变量,保存着内存的地址,引用只是内存区域的别名而已。 不同点: 1. 指针是一个实体,而引用仅是个别名; 2. 引用不能解指针,也就是使用*,指针必须解指针才能实现操作内存中的数据 3. 引用定义时必须初始化,指针不需要; 4. 引用没有 const,指针有 const; 5. 引用不能为空,指针可以为空; 6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身 7. 指针和引用的自增(++)运算意义不一样; 8. 引用不需要分配内存区域。
发表于 2015-05-27 12:49:23 回复(0)
1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。
4)引用访问对象是直接访问。指针访问对象是间接访问。
发表于 2015-05-19 19:26:39 回复(0)
本质:引用是别名,指针是地址,具体的:
• 指针可以在运行时改变其所指向的值,引用一旦和某个对象绑定就不再改变
• 从内存上看,指针会分配内存区域,而引用不会,它仅仅是一个别名
• 在参数传递时,引用会做类型检查,而指针不会
• 引用不能为空,指针可以为空
编辑于 2015-08-24 11:48:13 回复(3)