1.什麼是指標呢?
指標是c語言中的一種資料型別,t*,用該種型別定義的變數稱為指標變數,該變數中儲存的是乙個位址(指標變數中儲存的是乙個位址)
2.什麼是引用呢?
引用是某塊記憶體(變數)的別名
如何定義乙個指標/引用
int a =10;
int b =20;
int* ra =
&a;//定義乙個指標
int& rb = b;
//定義乙個引用
3.如何修改指標/引用所指向的值?
*ra =
100;
rb =
200;
//列印修改後a,b的值
cout << a << endl;
//100
cout << b << endl;
//200
4.指標和引用的大小是多少?
//列印指標和引用的大小
cout <<
sizeof
(ra)
<< endl;
//指標大小是根據作業系統和編譯器決定的一般為32位下:4位元組,64位下:8位元組
cout <<
sizeof
(rb)
<< endl;
//引用的大小為引用物件的大小
5.指標和引用能不能進行++/–操作呢?
指標進行++/–/±數字一般針對的是指向一段來連續空間才有意義
引用++/–/±是對引用的物件進行的操作
int arr=
;int c=10;
int* a = arr;
int& b = c;
//引用必須初始化
a++;//向後移動一位指向2
a +3;
//向後移動三位指向5
int* pa = arr;
int* pb = arr +3;
//兩個指標相加無意義
//pa + pb;
//兩個指標相減
pa - pb;
//兩個指標中間相隔的元素,此處pa位址低於pb所以為-3
//++a;
b++;//引用的+-會引起物件的+-
++b;
cout << pa - pb << endl;
//-3
cout <<
*a << endl;
cout << b << endl;
6.指標和引用的區別
6.1從本質上看:
引用是別名,指標是位址。指標首先是乙個實體,它是乙個位址,它指向一塊記憶體區域;而引用只是乙個別名,並不是乙個實體,底層指標和引用的實現是一樣的,它們的效率是一致的。具體在於編譯器的處理不同。
指標在執行時可以改變其值或者指向,引用初始化後不可改變(其所引用的物件可已改變)。
編譯方面:編譯時期生成符號表,儲存變數名和變數位址,對於指標,符號表中儲存指標名和指標本身的位址;而對於引用來說,符號表中儲存引用物件的位址,符號表一旦生成,程式執行過程中不會修改,因此引用初始化後不可改變。
記憶體分配方面:程式為指標是分配記憶體的,而對於引用是不分配記憶體的,因此存在多級指標,但只有一級引用。
大小方面:對乙個指標使用 sizeof,返回的是指標變數本身的大小,4 或 8 位元組,但是對乙個引用使用 sizeof,返回的是其引用的物件的大小。
作為函式形參:引用做函式形參,那麼在函式內部,對形參的修改即為對實參的修改。指標做函式形參,若是對指標本身做操作,不會影響實參指標,因為形參指標是實參指標的副本,但是對其所指向的內容操作,會更改實參所指的內容。
自增運算:對指標做自增運算會只指向下乙個位址,而對引用做自增運算會使所指物件自增。
指標引用和引用指標的區別
c 在傳參的過程中,指標 和指標引用 是有區別的。雖然,我們往往可以通過傳指標然後通過間址訪問來修改指標所指向物件的值,同樣,通過引用也可以直接修改物件的值。但是,當傳指標的時候有乙個問題,就是,我們雖然可以通過指標來修改指標所指向物件的值,但是我們沒有不能直接修改指標的內容 也就是指標變數存放的位...
指標和引用區別
指標和引用的定義和性質區別 1 元 而引用跟原來的變數實質上是同乙個東西,只不過是原變數的乙個別名而已。如 int a 1 int p a int a 1 int b a 上面定義了乙個整形變數和乙個指標變數p,該指標變數指向a的儲存單元,即p的值是a存 儲單元的位址。而下面2句定義了乙個整形變數a...
傳指標和傳指標引用的區別 指標和引用的區別(本質)
指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...