C++的指標與引用
阿新 • • 發佈:2021-02-04
指標
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;
}