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

C++的指標與引用

指標

1、指標定義:

指標是一個變數,其值為另一個變數的地址,即,記憶體位置的直接地址。

2、指標的宣告與運用:

#include <iostream>
using namespace std;
int main(void)
{
	int x = 20;
	int *p;//宣告指標
	p = &x;//指標指向地址,然後修改指標所指向的地址
	*p = 20;//*p 表示取指標的值,並將地址為(&x)的記憶體單元的內容修改為20
	return 0;
}

3、指標與陣列

可以利用指標p++來依次訪問儲存位置相鄰的陣列的值

#include <iostream>
using namespace std;
int main(void) { int a[5] = {0,1,2,3,4,5}; int *p; p = &a[0];//將p定位到a[0]的位置 p++;//將p指向下一個位置,就是a[1]的位置 return 0; }

4、當指標作為引數時

對函式的形參的值修改也會將實參的值改變

#include <iostream>
using namespace std;
void Swap(int *a,int *b)
{
	int x = *a;//暫時儲存a的值
	*a = *b;//將a指標指向的值改為b指標所指的值
	*b = x;//將b指標指向的值改為a指標未改變之前所指向的值,就是暫存在x中的值
}
int main(void) { int x = 1,y = 2; Swap(&x,&y);//這裡要傳遞地址 printf("x = %d,y = %d\n",x,y);//發現x,y的值發生了變化 return 0; }

5、從函式返回指標

Note:C++ 不支援在函式外返回區域性變數的地址,除非定義區域性變數為 static變數。

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int *RandRom()
{
static int tp[10]; srand( (unsigned)time( NULL ) ); for(int i=0;i<10;i++){ tp[i] = rand(); } return tp; } int main(void) { int *p; p = RandRom(); for(int i=0;i<10;i++){ cout<<"i = "<<i<<",*(p+i) = "; cout<<*(p+i)<<endl; } return 0; }

引用

1、定義

引用變數是一個別名,也就是說,它是某個已存在變數的另一個名字。一旦把引用初始化為某個變數,就可以使用該引用名稱或變數名稱來指向變數。

2、引用和指標的區別

1、不存在空引用,引用必須連線到一塊合法的記憶體
2、一旦一個引用初始化為一個物件,就不能再轉為另一個物件。指標隨時可以指向另一個物件。
3、引用必須在建立時被初始化,指標可以在任何時候被初始化。

3、引用的建立

引用的值會隨著引用物件的值的改變而改變

#include <iostream>
using namespace std;

int main(void)
{
    int n = 3;
    int& x = n;//這裡一定要初始化
    n = 7;
    cout<<"n = "<<n<<",x = "<<x<<endl;
    return 0;
}

4、引用作為引數

#include <iostream>
using namespace std;
void Swap(int& x,int &y)//形參的型別是引用
{
    int t = x;
    x = y;
    y = t;
}
int main(void)
{
    int a = 1,b = 2;
    Swap(a,b);
    cout<<"a = "<<a<<endl;
    cout<<"b = "<<b<<endl;

    return 0;
}

5、引用作為返回值

當返回一個引用時,被引用的物件不能超過作用域,所以一個對區域性變數的引用是不合法的,但是可以返回一個對靜態變數的引用。

#include <iostream>
using namespace std;
int& Mul(int x,int y)
{
    static int ans = x*y;//這裡引用的返回值設為static
    return ans;
}
int main(void)
{
    int a = 6,b = 7;
    int c = Mul(a,b);
    cout<<"c = "<<c<<endl;

    return 0;
}