C指標(基礎)

2021-10-01 01:26:41 字數 2158 閱讀 8507

指標的定義:

在科學計算中,指標(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 乙個指向整型的常量指標,不能修改指標的值,但是可以修改指標所指向的值...