指標的定義:
在科學計算中,指標(pointer)是程式語言的乙個物件,利用位址,它的值直接指向(points to)存在電腦 儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的成為「指標」。意思是通過它能找到以它為位址的記憶體單元。簡言之,指標就是變數,是用來存放位址的變數,存放在指標中的值都被當做位址來處理
位址是唯一標識一塊位址空間的
指標的大小:
乙個位元組佔8個位元位(bit),那麼,在32位機器上,位址是由32個0或1進行表示,那麼就得用4位元組來進行儲存,所以乙個指標變數在32位環境下的大小是4個位元組
同理可得,在64位機器上,乙個指標變數的大小是8個位元組
指標型別
指標是變數,變數有型別,那麼指標同樣有型別
指標的定義方式為型別+* ,如下所示:
char *pc = null; //存放char型別變數的位址
int *pi = null; //存放int型別變數的位址
short *ps = null; //存放short型別變數的位址
long *pl=null; //存放long型別變數的位址
float *pf = null; //存放float型別變數的位址
double *pd = null; //存放double型別變數的位址
指標±整數
強調:指標+1,實際是加上其所指向型別的大小
指標解引用(*)
強調:指標在定義時總是佔4位元組,其定義的型別只能表示其在解引用(*)時可以訪問到的位元組數3
指標的運算
指標-指標:兩個指標相減,表示兩指標間所經歷的元素的個數(這個元素的型別由兩個指標型別所決定(型別必然是相同的,否則無意義))
指標和陣列
上述程式中,arr,&arr[0],&arr 三者在數值層面是相同的,但是表示的意義不盡相同,前兩個表示整個陣列的位址,最後乙個表示陣列首元素的位址
既然可以把陣列名當成位址中存放到乙個指標中,那麼使用指標來訪問乙個陣列就成為了可能
#include#includeint main()
; int *p = arr;//指標存放陣列首元素的位址
int sz = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < sz; i++)
system("pause");
return 0;
}
執行結果:
所以(p+i)其實計算的是陣列arr下標為i的位址,那我們就可以直接通過指標來訪問陣列數值:*(p+i)
二級指標
指標變數是變數,是變數就會有位址,有位址就可以進行儲存,那麼就形成了二級指標
對於二級指標的運算:
*ppa 通過對ppa中的位址進行解引用,這樣找到的是pa , *ppa 其實訪問的就是 pa
int b = 20;
*ppa = &b; // <==> pa = &b ;
**ppa 先通過對 *ppa 找到 pa ,然後對 pa 進行解引用操作 :*pa , 則找到的就是a
**ppa = 30;
//等價於 *pa = 30; a = 30;
指標陣列
判斷乙個型別是指標還是陣列,由操作符的優先順序決定
所以,指標陣列是陣列,是存放指標的陣列
c指標基礎
1.和 為互逆操作 2.100 25,這樣的操作是非法的,因為字面值100是整形,而間接訪問操作只能作用域指標型別.如果一定要這樣操作 int 100 25,強制轉換之後才合法.3.和 為同級運算子,和 都是從右向左結合,a 這樣的操作,會先拷貝出a在對a進行 1,然後對拷貝出來的a進行 操作.p是...
this指標基礎 C )
1.每個成員函式中都包含乙個特殊的指標,這個指標的名字是固定的,成為this指標。它是指向類物件的指標,它的值是當前被呼叫的成員函式所在的物件的起始位址。通常情況下,this指標是隱式使用,作為引數被傳遞給成員函式的。例如,box類的乙個成員函式 定義是這樣的 int box volume 實際上,...
c指標基礎
指標 每個記憶體位置都有位址唯一確定並引用,指標只是位址的另乙個名字 指標變數就是乙個值為另乙個記憶體位址的變數 int const p 乙個指向整型常量的指標 可以修改指標的值,但是不能修改指標所指向的值 int const p 乙個指向整型的常量指標,不能修改指標的值,但是可以修改指標所指向的值...