在c&c++裡面指標是很重要的,也是較難理解的。指標的用法非常靈活 ,下面通過具體的例子來說說指標的常見的用法。
指標介紹:
在高階語言中,指標有效地取代了在低階語言,如組合語言與機器碼,直接使用通用暫存器的地方,但它可能只適用於合法位址之中。指標參考了儲存器中某個位址,通過被稱為反參考指標的動作,可以取出在那個位址中儲存的值。
還是通俗點,打個比喻 :假如你有一把鑰匙,但你不知道該鑰匙對應的是哪一戶人家?你自然有他也做不了什麼。但是當有個人高數你說,這鑰匙是李四家的 。你按照指引路線找到李四家後。你想想可以幹什麼呢 ?我是不是只要開啟了門 ,李四家的東西我是不是可以隨意拿取(危險性也明了吧)。指標就類似指引,指引有了接下來的就只是用鑰匙開啟門取用罷了。
指標常用分析:
1、指標指向變數:
**塊:
/**
@指標用法
@author lfb
*/#include#include#include#include#define num_size 50
using namespace std;
void swap(int x,int y)
int main()
最後輸出的結果還是a = 2,b =3。因為在函式呼叫時,實參和形參之間只是值傳遞。但我們使用指標結果就不一樣了。
void swap(int *x,int *y)
int main()
輸出結果a=3,b=2。變數a和b的值發生了交換。這是因為我們利用指標訪問變數的儲存單元,間接修改變數的值。
2、指標指向陣列:
定義乙個陣列並初始化,int array[4]=,定義乙個指標變數並把陣列的位址賦給它,int *p=array,注意陣列名就是陣列的位址,而且陣列的位址就是首元素的位址。因此我們的指標變數就指向了陣列的首元素,*p = 1。如果把*(p+1),那麼指標變數就指向了陣列的下乙個元素2,注意p+1與*(p+1)不同, p+1表示第乙個元素值加1。因此我們可以利用指標來遍歷陣列的各個元素:
void print()
; int *p = array;
for(int i = 0;i<4;i++)
return 0;
}
3、指標指向字串:
我們都知道用陣列儲存字串,如char name[20]="abc",上面已經簡單講述了指標指向陣列,所以我們可以這樣做,char *name="abc",指標變數指向字串的首個字元並可以依次訪問字串的各個字元。
void print()
int main()
上面**塊裡語句(*p)(a,b)可以用p(a,b)來代替,因為p和sum就是一樣的,只是用前者可能更容易理解一點。而我們要知道怎樣定義乙個指標指向函式,
int (*p)(int,int)這是固定寫法。指標指向函式用起來確實有點抽象。
5,指標指向結構體:
我們首先首先定義乙個結構型別,
typedef struct stu
stu,*stu;
/**
@指標用法
@author lfb
*/#include#include#include#include#include#define num_size 50
using namespace std;
typedef struct stu
stu,*stu;
int main();
cout定義乙個指標指向結構體型別s,struct student *p;把結構體變數s的位址賦給指標變數p,p=&s;我們可以有3種方式來訪問結構體中的屬性:
stu.ages=15; (*p).ages=15; p->ages=15;不過第三種方式在c語言中只能用來指向結構體。
6,還介紹下二級指標:二級指標又分為指向指標變數的指標和指向陣列的指標。二維陣列經常用。
** :
/**@二級指標的使用
最後:使用指標,如果僅指向某個變數,則無需分配記憶體。否則必須初始化,分配記憶體。當然分配了記憶體,最後記得釋放記憶體。
多執行緒的利器 C 智慧型指標
c 給程式人員提供很多的權力,自然也就要完成很多的任務。最典型的就是c 的記憶體沒有自動 機制,所以要求程式設計師每次new delete,不匹配則容易造成記憶體洩漏。因此c 引入智慧型指標,是raii 利用的就是c 構造的物件最終會被銷毀的原則。raii的做法是使用乙個物件,在其構造時獲取對應的資...
C語言指標
指標變數是包含記憶體位址的變數,它指向記憶體中的一塊區域,通過指標的值,可以間接訪問到相應的記憶體單元的資料,並做相應的修改。1 指標的定義和簡單使用 定義乙個指標變數和定義一般的變數類似,只需在變數名前面加乙個 對乙個指標變數賦值可以用取位址符 來獲取到乙個變數的位址,如果要獲得指標指向的記憶體區...
C語言指標
1 定義指標變數void change int n 格式 變數型別 變數名 定義了乙個指標變數p 指標變數只能儲存位址 指標變數p前面的int 指標變數p只能指向int型別的資料 int main void change int n 2 指標與陣列 陣列名其實質是乙個指標,但是它和普通的指標變數還是...