指標是乙個特殊的變數,它裡面儲存的數值被解釋為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容:指標的型別,指標所指向的型別,指標的值或者指標所指向的記憶體區,還有指標本身所佔據的記憶體區。
去掉宣告中指標的名字,剩下的就是指標的型別。
例如:
int *ptr; //指標的型別是int *
char *ptr; //指標的型別是char *
int **ptr; //指標的型別是 int **
int (*ptr)[3]; //指標的型別是 int(*)[3]
int *(*ptr)[4]; //指標的型別是 int *(*)[4]
當你通過指標來訪問指標所指向的記憶體區時,指標所指向的型別決定了編譯器將把那片記憶體區里的內容當做什麼來看待。
從語法上看,將宣告中的指標名字和名字左邊的指標宣告符*去掉,剩下的就是指標所指向的型別。例如:
int *ptr; //指標所指向的型別是int
char *ptr; //指標所指向的的型別是char
int **ptr; //指標所指向的的型別是 int *
int (*ptr)[3]; //指標所指向的的型別是 int()[3]
int *(*ptr)[4]; //指標所指向的的型別是 int *()[4]
指標的值是指標本身儲存的數值,這個值將被編譯器當作乙個位址,而不是乙個一般的數值。
指標所指向的記憶體區就是從指標的值所代表的那個記憶體位址開始的,長度為sizeof(指標所指向的型別)的一片記憶體區。以後,我們說乙個指標的值是xx,就相當於說該指標指向了以xx為首位址的一片記憶體區域;我們說乙個指標指向了某塊記憶體區域,就相當於說該指標的值是這塊記憶體區域的首位址。
用函式sizeof(指標的型別)測一下就知道了。在32位平台裡,指標本身佔據了4個位元組的長度。
ptr++含義:指標ptr的值加上sizeof(int),而非簡單的數值加1。
例1:
int a[5] = ;
int *ptr = a;
ptr++;
例2:
int array[20];
int *ptr=array;
...
//此處略去為整型陣列賦值的**。
...
for(i=0;i<20;i++)
這個例子將整型陣列中各個單元的值加1.由於每次迴圈都將指標ptr加1,所以每次迴圈都能訪問陣列的下乙個單元。
例3:
int array[10]=,value;
cout
例:int a = 12;
int b;
int *p;
int **ptr;
p = &a;
*p = 24;
ptr = &p;//取整型指標的位址
*ptr = &b;//取整型變數的位址
**ptr = 34;//賦值
注:其中的**符號。int **ptr;整型指標的指標。
以下過程為個人理解,敬請改正:
此處最終x指向y[1]的位址,而輸出y中,因為首元素為空,所以y不輸出。
參考:
C 指標詳解
前言 今天發現自己對c 了解得還不夠深刻,毅然決定重新補充c 指標的知識。一直在論壇裡聽別人說沒有幾個人真正的會用指標,我居然懷疑了一下自己,好吧。惡補唄,順便寫篇部落格祭奠一下,這篇文章適合非小白看,我只是把容易錯的點補充了。1.資料在記憶體中是如何儲存的 在編譯時就會系統就會給變數分配記憶體空間...
詳解C指標
指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體 使用者空間的虛擬記憶體 裡的乙個位址。乙個指標包含四個方面的內容 指標的型別 指標所指向的型別 指標所指向的記憶體區 指標本身所佔據的記憶體區。接下來就下面幾個例子作說明 1 int p 2 char p 3 int p 4 int p 3 5...
C 指標詳解
最近幾天正在進行自考c 課程的學習,在做卷子的時候,遇到了好幾次指標的問題,讓我很是頭大,現在我就給大家分享一下我的收穫吧,也算是對自己的乙個總結和提公升吧!首先我們得知道指標是用來指向乙個位址的東西,在程式設計的時候,我們常常有這樣的操作int a 5,這樣寫系統會自動的在記憶體裡邊建立乙個a型別...