C++指针与引用的区别
生活随笔
收集整理的這篇文章主要介紹了
C++指针与引用的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(1)指針是一個變量,本身占有內存,內存中存儲的是所指向對象的地址。引用是內存的別名。
(2)指針可以通過解引用的方式,取出所指向內存中的值。引用沒有解引用。
(3)指針可以先定義,然后在后面初始化。引用在定義的時候必須初始化。
(4)++運算符對于指針、引用的作用不同。
引用的實質
指針實際上是一個指針常量,因此其只能指向同一個對象。
#include <iostream>
using namespace std;
int main()
{int a = 100;// 相當于int* const b = aint& b = a;// 相當于const int* const c = aconst int& c = a;cout<<b<<endl<<c<<endl;
}
指針是個變量,里面存放的是所指向的內存的地址。而引用是一個變量的別名,只是給一個內存取了一個別名而已。
#include <iostream>
using namespace std;int main(int argc,char** argv)
{int a = 10;int* ptr = &a;int& b = a;cout<<"a的地址為"<<&a<<endl;cout<<"指針存放的數據為"<<ptr<<endl;cout<<"指針變量的地址為"<<&ptr<<endl;cout<<"引用的地址為"<<&b<<endl;
}
(1)可見指針是一個變量,本次就占一個地址。
(2)指針的內存中所存放的數據是一個地址。可以通過解引用的方式取出該地址的值。
(3)引用只是同一片內存的別名。
如果想取出指向的地址中的值的話,指針需要解引用,而引用不需要
#include <iostream>
using namespace std;int main(int argc,char** argv)
{int a = 10;int* ptr = &a;int& b = a;cout<<"取出指針所指向內存中的值"<<*ptr<<endl;cout<<"取出引用對象的值"<<b<<endl;
}
引用在定義的時候必須初始化,而指針可以先定義,然后再初始化
#include <iostream>
using namespace std;int main(int argc,char** argv)
{int a = 10;// 可以,指針可以先定義然后再初始化int* ptr;ptr = &a;// 不可以,指針在定義的時候必須初始化// int& b;int& b = a;// 不可以,引用必須賦一個左值// int& c = 10;
}
引用不能為空,指針可以為空
和上面那個一樣,就是說引用在定義的時候必須初始化,而指針可以不初始化。
運算符++的含義不同
對應指針,++運算符是將該指針所指向的內存,移動所指向對象占用的內存個數。比如:指針ptr所指向的的內存為0x7ffeafae8924,所指向對象的數據類型為int,占4位,++后,指向的地址變為0x7ffeafae8928。
#include <iostream>
using namespace std;int main(int argc,char** argv)
{int a = 2;int* ptr = &a;int& b = a;cout<<"指針本來指向的地址"<<ptr<<endl;ptr++;cout<<"++后指針指向的地址"<<ptr<<endl;
}
對于引用,是將變量值+1。
#include <iostream>
using namespace std;int main(int argc,char** argv)
{int a = 2;int* ptr = &a;int& b = a;cout<<"引用變量的值為"<<b<<endl;b++;cout<<"引用變量的值變為"<<b<<endl;
}
總結
以上是生活随笔為你收集整理的C++指针与引用的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ORB_SLAM2中的Sim3变换
- 下一篇: C++内存的分区