C語言指標初見(一)

2021-07-06 05:08:55 字數 2612 閱讀 3519

最近一直在學習c語言指標,一直想總結一下,終於騰出來時間了,如果有寫錯的地方希望大家多多指正!

乙個變數的位址稱為該變數的「指標」。

如果有乙個變數專門用來存放另一變數的位址(即指標),則它稱為「指標變數」

指標變數就是位址變數,用來存放位址,指標變數的值是位址(即指標)

定義乙個整型變數int a;,定義乙個指向變數a的指標變數int *p = a; 或int *p; p = &a;。此時p指向a,a的位址賦給指標變數p,而不是*p(即變數a)。*p 表示變數a。

定義指標變數:型別名 *指標變數名;

乙個變數的指標的含義包括兩個方面,一是以儲存單元編號表示的位址(如編號為2000的位元組),一是它指向的儲存單元的資料型別(如int,char,float等)。

不能通過執行呼叫函式來改變實參指標變數的值,但可以改變實參指標變數所指變數的值。

通過指標引用一維陣列(整型):

若有整型一維陣列:int a[10];

定義指標變數:int *p; p = a;(或p = &a[0])

一維陣列名a不能代表整個陣列,它代表的是陣列首元素的位址,即此時是將陣列首元素的位址賦給p。

在進行運算時「p++」代表指向下乙個元素。(p++並不是單純的加1,而是增加它所指向的資料型別所佔的位元組大小)

此時有p+i==&a[i]。*(p+i)==a[i]。

通過指標引用二維陣列(整型):

若有二維陣列:int a[10][10];

定義指標變數:int *p;

二維陣列名a代表二維陣列首元素的位址,現在的首元素不是乙個簡單的整型元素,而是由10個整型元素所組成的一維陣列,因為a代表的是首行(即序號為0的行)的首位址。

二維陣列裡啊a[0],a[1],a[2]的型別為int *型。

因此可以定義p=a[0];則p++依次指向a[1]---a[99]。*p輸出p指向的元素的值。

定義指向一維整型陣列的指標變數:int (*q)[10]; q為指標變數,它指向包含10個元素的一維陣列。q的基型別是一維陣列。

對於二維陣列:

(1)a二維陣列名,指向一維陣列a[0],即0行首位址。

(2)a[0] ,*(a+0),*a0行0列首位址。

(3)a+1,&a[1]1行首位址。

(4)a[1],*(a+1)1行0列元素a[1][0]的位址。

(5)a[1]+2,*(a+1)+2,&a[1][2]1行2列元素a[1][2]的位址。

(6)*(a[1]+2),*(*(a+1)+2),a[1][2]1行2列元素a[1][2]的值。

a[0],a[1],a[2]既然是一維陣列名,而c語言又規定陣列名代表陣列元素的首位址,因此a[0]代表一維陣列a[0]中第0列元素的位址,即&a[0][0]。也就是說a[1]的值是&a[1][0],a[2]的值是&a[2][0]。

二維陣列名是指向行的,因此a+1中的"1"代表一行中全部元素的位元組數。

一維陣列名是指向列的,因此a[0]+1中的"1"代表乙個a元素所佔的位元組數。

指向行的指標前面加上*,就變為指向列的指標。

指向列的指標前面加上&,就變為指向行的指標。

&a[i]和a[i]的值是一樣的,但是含義不同。

&a[i]或a+i指向行。

*(a+i)或a[i]指向列。

當下標j為0時,它們的值相同,即它們代表同一位址,但是它們所指的物件是不同的,即指標的基型別不同。

通過指標引用字串

char a[10];或char *a; a = (char *)malloc(10);

char *p = a;

此時p指向字串a的第乙個字元。

通過字元陣列名能輸出整個字串,但不同通過整型陣列名輸出陣列中所有元素。

可以通過字元指標變數輸出整個字串。

c語言中只有字元變數,沒有字串變數。

編譯時為字元陣列分配若干儲存單元,以存放各元素的值,而對字元指標變數,只分配乙個儲存單元。

字元指標變數的值可以改變,而陣列名代表乙個固定的值(陣列元素首位址),不能改變。

字元陣列中各元素的值是可以改變的,而字元指標變數指向的字串常量的值是不能改變的。

指標陣列: 型別名 *陣列名[陣列長度]。

char *s[3] = ;

int *a[3];陣列中的元素存放的是位址。

指標陣列比較適合用來指向若干個字串,使字串的處理更加靈活。

陣列中s[0]用來存放字串「aa」的首位址。

指向指標資料的指標:

char **p;  (p=位址,*p=值。)

int **q; (q=位址,**q=值。)

*運算子的結合性是從右到左,因此**p相當於*(*p)。

後面的*p表示p是指標變數,前面的char*表示p指向char*(或int*)型資料。

C語言指標 初見指標

種一棵樹最好的時間是十年前,其次是現在。如有錯誤請指出,謝謝 一 指標變數 在說指標變數之前,先說一下位址這個東西。現在大多數計算機裡都是記憶體被劃分為位元組,然後每個位元組可以儲存8位資訊,比如01010101,每個位元組有唯一的位址。有的變數佔據乙個或多個位元組記憶體空間,把第乙個位元組的位址看...

c語言 初見const

在寫 的過程中,我們常常利用define來定義一些常量元素,起到了對元素內容的封鎖作用,使他無法在函式內部被更改。那麼如果我們在寫引數的時候也想要封鎖原資料呢?這時候我們就可以使用const來定義常變數。const在定義常變數時,可以將變數變成唯讀,即不可寫,無法對元素進行賦值。而資料型別對於con...

C語言指標(一)

乙個變數的位址稱為該變數的指標。如果有乙個變數專門用來存放另一變數的位址 即指標 則稱他為 指標變數 includeint main 1 指標變數前面的 表示該變數的型別為指標型變數 a的位址是賦給指標變數pointer 1,而不是賦給 pointer 1 即變數a 2 乙個變數的指標的含義包括兩個...