szavck
作者szavck·2017-12-15 22:14
软件开发工程师·好莱坞

指针和引用的区别

字数 935阅读 1157评论 0赞 0

指针和引用的联系与区别

1、指针是一个实体,和其他类型变量一样,需要占用内存,在32位系统里指针是一个占用四字节的变量,他的内容是所指向内存的地址。而引用只是变量的别名,可以说和他代表的变量是同一个东西,不占用额外内存空间。所以从内容分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。

2、引用不能为空,指针可以为空。指针初始化的时候,可以指向一个地址,也可以为空。引用必须初始化为另一个变量.

3、引用没有 const,指针有 const;

4、引用只能在定义时被初始化一次,之后不可变;指针可变;

5、“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;

6、指针和引用的自增(++)运算意义不一样;引用是变量的别名,就是说跟变量是同一个东西,如int a=3;int &b=a;其实b与a是同一个变量,对a操作就是对b操作,同理对b操作就是对a操作,如执行b++;则运行后a=b=4;由于引用和变量是同一个东西,所以引用不占用内存空间,从而减少花销。而指针是另外一个变量,在内存中会多分配一块内存给这个指针变量,如int a=3;int p=&a;,p虽然存的是变量a的地址,但对p操作不会影响a的值,如执行p++;运行完a的值仍是3,但p的值已经改变了。但如果执行(p)++;则a的值才变成4,p的值仍然没变。

7、 引用主要用于参数传递中,一是减少内存花销,二是可以通过在函数内部更改外部变量的值,但是这样也给程序带来不安全性,所以要慎用要懂得用。

8、向函数中传递指针和传递指针的引用的区别:如果是传递指针,那么会先复制该指针,在函数内部使用的是复制后的指针,这个指针与原来的指针指向相同的地址,如果在函数内部将复制后的指针指向了另外的新的对象,那么不会影响原有的指针;但是对于传递指针引用,如果将传递进来的指针指向了新的对象,那么原始的指针也就指向了新的对象,这样就会造成内存泄漏,因为原来指针指向的地方已经不能再引用了,即使没有将传递进来的指针指向新的对象,而是在函数结束的时候释放了指针,那么在函数外部就不能再使用原有的指针了,因为原来的内存已经被释放了。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

X社区推广