1.都是位址的概念
指標指向一塊記憶體,它的值為該塊記憶體的位址。引用是某塊記憶體的別名。
1.指標是實體,引用只是乙個別名。
2.使用時,引用需要解引用,指標不需要。(解引用指獲得該記憶體位址處儲存的值)
3.引用從一而終,指標可多變。給引用賦值修改的是該引用所關聯的物件的值,而並不是使引用與另乙個物件關聯。引用一經引用,就始終指向同乙個特定物件。
demo1
int ival = 1024,ival2 = 2048;
int *pi = &ival,*pi2 = &ival2;
pi = pi2;//pi now points to ival2
demo2
int &ri = ival,&ri2 = ival2;
ri = ri2; //assigns ival2 to ival
4.指標可為空,引用不可為空。引用總是指向某個物件(定義引用時沒有初始化是錯誤的)
稱作指標的引用。函式的形參和呼叫的實參就產生了關聯,所有對形參的操作也會影響實參。
例項如下(二叉排序樹的建立、遍歷)
#include using namespace std;
typedef struct btnode
btnode;
void createbst(btnode *&bt,int key,int n);//建立平衡二叉樹
int bstinsert(btnode *&bt,int key);//插入節點
void preorder(btnode *bt);//先序遍歷
void main()
; int n = sizeof(key)/sizeof(key[0]);
btnode *bt;
bt = (btnode*)malloc(sizeof(btnode));
bt->lchild = bt->rchild = null;
createbst(bt,key,n);
preorder(bt);
}void createbst(btnode *&bt,int key,int n)
else }
void preorder(btnode *bt)
}
上面例項中的方法void createbst(btnode *&bt,int key,int n)和int bstinsert(btnode *&bt,int key)。要用*&而不能只用*,因為此處均為初始化實參btnode *bt,形參若用指標,則在for迴圈中每次均對新的指標變數進行初始化,建立二叉樹這種型別的結構賦值時方法中的形參都應是*&型(個人理解)。 C 中 指標引用)與 (指標)的區別
指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...
C 中指標 與指標引用 的區別
c 中 指標引用 與 指標 的區別 指標是乙個存放位址的變數,指標引用指的是這個存放位址的變數的引用。c 中如果引數不是引用的話,會呼叫引數物件的拷貝建構函式,所以如果有需求想改變指標所指的物件即想要改變指標變數裡存放的位址,就要使用指標引用。下面用乙個測試例子和過程圖結合進行說明 分析 在test...
C 中指標與引用的區別
指標和引用在c 中很常用,但是對於它們之間的區別很多初學者都不是太熟悉,下面來談談他們2者之間的區別和用法。1.指標和引用的定義和性質區別 1 指標 指標是乙個變數,只不過這個變數儲存的是乙個位址,指向記憶體的乙個儲存單元 而引用跟原來的變數實質上是同乙個東西,只不過是原變數的乙個別名而已。如 in...