1. 程式人生 > 其它 >指標與引用

指標與引用

C++中指標和引用的應用很常見,連著的使用極易混淆,但是區別很明顯:

1. 指標是變數,而引用只是變數的一個別名,而且引用使得別名與引用物件綁在了一起。
2.指標初始化之後還可以指向其他變數,但是引用只能初始化一次。
3.sizeof 操作的結果不一樣,引用為所指向變數的大小,指標則返回指標本身的大小。
4. 引用不可以為空,但是指標可以是空指標。

#include<cstdio>
//引用的用法,引用就相當於給一個物件定義一個別名,作用在引用上的所有操作都與繫結的物件有關。
int main()
{
	int val = 11, val2 = 33;
	int &refval = val, &refval2 = val2; ///引用必須要初始化,使其繫結到一個變數上
	///修改引用的值將改變其所繫結的變數的值
	refval = -22;
	printf("%d %d\n", val, refval);//輸出為-22,refval的值和val一樣
	refval = refval2;   //引用一但初始化(繫結),將始終繫結到同一個特定物件上,無法繫結到另一個物件上
	printf("%d %d\n", val, refval);//輸出為33,33
	return 0;
}

引用作為函式的引數

#include<bits/stdc++.h>
using namespace std;
void swap(int &a,int &b)
{
	int t;
	t=a;
	a=b;
	b=t;
}
int main()
{
	int x,y;
	cin>>x>>y;
	swap(x,y);
	cout<<x<<" "<<y<<endl;
}

指標的引用

#include<bits/stdc++.h>
using namespace std;
void add1(int * &a)
{
	(*a)++; 
}
void add2(int * &a)
{
	a++;
}
int main()
{
	int *x;
	x=new int; 
	printf("%x\n",x);
	scanf("%d",x);
	add1(x);
	cout<<x<<" "<<*x<<endl;
	add2(x);
	cout<<x<<" "<<*x<<endl;
}