C語言學習易錯點總結(六) 指標

2021-10-03 06:47:56 字數 2490 閱讀 8028

對於記憶體而言,將記憶體單元的編號叫做位址,這個單元的位址即稱為指標。c語言中用乙個變數來存放指標,這種變數稱為指標變數。指標變數的值就是某記憶體單元的位址或指標。

變數的指標就是變數的位址,存放變數位址的變數就是指標變數。eg:i_pointer代表指標變數,而*i_pointer是i_pointer指向的變數。

型別說明符 *變數名;

//int *p;

乙個指標變數只能指向同型別的變數

//指標的定義

int a;

int*p=

&a;int

*q;q=

&a;//不用再加*;

//*q,*p都代表a的值,q、p都指向a的位址

指標變數在函式呼叫時,將實參變數的值傳遞給形參變數。採取的依然是「值傳遞」

//考慮下列語句的錯誤

swap

(int

*p1,

int*p2)

temp作為乙個指標變數,它應該儲存指標變數,第一處和第二處錯誤都是因為,此時,temp還沒有儲存位址,所以取不到相應的值。

指標運算子 * 與指標說明符 * 不是一回事。在指標變數說明中,「 * 」是型別說明,表示其後的變數是指標型別。而表示式中的「 * 」則是表示指標變數所指的變數。

int a[5]

,*pa;

pa=a;

//可以將陣列的首位址賦予指標變數

pa++

;//指標指向的位置向後移動

char

*pc;

pc =

"c language"

;//將字串的字元陣列的首位址裝入指標變數

int(

*pf)()

;//函式入口指標

pf = f;

//f為函式名

兩個指標變數還能進行減法運算,表示相差的位址。但是加法是不允許的,因為毫無意義。

指標變數賦0值和未賦值是不同的,未賦值時不能使用。

int a[5]

,*p;

p=a;

//等價於p = &a[0]

此時可以*(p+i)或*(a+i)或a[i]來訪問第i個元素,p[i]與*(p+i)等價。

值得注意的是,p++是合法的,a++不是合法的,因為a是陣列的首位址,是乙個常量(static)。

陣列做引數

void

main()

f(int*x,

int n)

可以形參和實參都是陣列名;實參用陣列,形參用指標變數;實參、形參都用指標變數;實參為指標變數,形參為陣列名;

int a[3]

[4]=

,,};

//a既是二維陣列名,也代表整個二維陣列的首位址,也是二維陣列0行的首位址,a[i]代表第i行首位址

int(

*p)[4]

;//指向包含4個元素的一維陣列

p=a[1]

;

字串指標可以寫為

char *ps;

ps=「c language」;

而對陣列而言,不能寫為

char st[20];

st=;

型別說明符 *函式名(形參表)

//返回值是指標

char

*name=

;//name[0]指向illagal day

#include

"string.h"

intmain()

;int n=5;

sort

(name,n)

;print

(name,n)

;return0;

}void

sort

(char

*name,

int n)}}

void

print

(char

*name,

int n)

char **p;

p=name[1];

int

main

(int argc,

char

*ar**)

用於dos命令列輸入:c:>可執行檔名 引數 引數 …

argc 代表命令列引數個數(可執行檔名也是乙個引數)

所以取引數一般從ar**[1]開始

C語言學習周總結006(指標)

指標 pointer 可謂是c語言的一大精髓,同樣也是c語言學習的一大難點,早在正式開始學習c語言前就聽說過這一大名,如今我也開始接觸到了它。通過課上的學習以及課下的整理,我對指標有了一些了解。在認識指標前,我們先要認識記憶體位址這一概念。要知道,我們每定義乙個變數,系統就會在記憶體中為該變數分配一...

C語言學習(三) 指標

指標的定義int p char p float p指標變數所佔記憶體的大小 跟前面定義的型別無關 而跟系統有關 16bits作業系統 2b 32bits作業系統 4b 64bits作業系統 8b 指標指向乙個值所在的第乙個位元組 通常乙個位址存放乙個位元組 const修飾指標 指標指向乙個字串時 如...

C語言學習4 指標

int a 10 int p a 一級指標 int s p 二級指標 int p 10 指向陣列的指標 int s 10 指標指向放指標的陣列 這個陣列有十個空間 int p 10 開闢10個空間 每個空間放指標 例如 int br 10 int s 10 br int ar 10 int p 10...