C語言中的指標學習(小黑板)

2021-09-19 03:03:46 字數 2837 閱讀 2873

指標是c語言中的精華所在,也是c語言的危險之在,今天又重現溫習了一下c語言,做了一下總結。

歡迎批閱。

(1)指標的含義

以下為記憶體顯示

位址 儲存變數 儲存的值

f1----> a(整形資料)<---10

f2----> b(指標型別)<---a的位址

所以應該注意的一點是指標型別資料要賦初值,不然會有危險

如果只宣告指標變數而不作操作那麼它本身的值就是儲存區上一次程式遺留的值,

此刻他便被當為位址,如果你給此位址指向的變數賦值可能會修改系統內部東西,

這就是c語言的指標操作的危險性。

例如:

在記憶體中

f1----> a (指標型別)<--- 記憶體本身的值(作為位址資料)

如果記憶體本身的值為00則他指向系統程式開始的那一部分

則你的賦值語句就是將00位址區域賦值為10則出現錯誤

注意:int* p,q;的意思是宣告指標p宣告int型變數q

(2)指標的應用

指標一般有兩種常用應用

1>函式要返回多個值時,乙個單純的return就解決不了問題,需要用指標進行值傳遞。

函式傳遞的引數就是要儲存結果的值。

swap(int *a,int *b)

2>函式需要返回狀態(就是函式操作是否成功)時需要用指標傳遞結果,用return返回操作狀態

例如:除法的函式

void chufa(int a,int b,int *result)

else

}

(3)陣列變數引數的含義

如下面的例子,宣告了乙個陣列,則a其實就代表著陣列a的起始位址,也就是a[0]的位址

則a就成為了指標型變數引數。

記憶體中的顯示

f1----ar[0]

f2----ar[1]

f3----ar[2]

f6----*p <----f1(ar[0]的位址)

則 p+1 <----f2 p+2 <----f3

*(p+1) = ar[1]

注意:陣列ar是常量指標也就是const不能被賦值和改變!

(4)關於const與指標的關係

兩種表示形式

1>

int *const q = &i;//q是const型指標

則q不能改變,可以對*q進行賦值,但不能改變q

2>

const int *p1 = &i;//表示不能通過*q去修改i

下面幾種情況的區分要看const與*的位置關係,如果const在*的後面則表示指標不可修改。

反之則不能通過*p進行賦值

const int* p1 = &i;

int const* p2 = &i;

int *const p3 = &i;

應用:在函式中經常在陣列型引數前面加const用以保護陣列不受破壞。

(5)指標的運算

1>加一減一

int *a = &i;

a++;//a位址加乙個int長度

a--;//a位址減乙個int長度

在記憶體中這樣

0xffffff64 ----> i

則 a = 0xffffff64

a++ 運算後a變為 0xffffff68

a-- 運算後a變為 0xffffff60

2>減法

兩個相同型別的指標變數相減結果為他們相差多少倍的int的資料寬度

3>*p++運算

先賦值再加一。

4>比較運算

比較大小 > < == !=

5>void *p指標

代表含義是指標指向一塊不知道大小的區域

//malloc動態記憶體分配

#include int main()

{ int number;

int *a;

printf("請輸入數量");

scanf("%d",&number);

a = (int*)malloc(number*sizeof(int));//動態記憶體申請

for(int i=0;i(6)指標與二維陣列介紹

char a[10][10];//宣告二維陣列

char **p = &a[10][10];

指標變數    陣列首位址形成一列                陣列區域a

p       ------->    a[0]      -------->   [第一行陣列]//a[0]為二維陣列的第一行首位址

p+1  ------->    a[1]      -------->   [第二行陣列]//a[1]為二維陣列的第二行首位址

p+2  ------->    a[2]

**p 是 a[0][0]

*(*p+1) 是 a[0][1]

posted @

2016-01-28 10:20

#cloud 閱讀(

...)

編輯收藏

C 語言中的指標

指標是 c 語言中的精華,正確靈活的運用指標,可以表示複雜的資料結構,動態分配記憶體,方便使用字串和陣列,呼叫函式返回多結果,直接處理記憶體單元等等。位址就是記憶體的編號,如果拿旅店作為記憶體,那麼每個房間號其實就相當於位址了。當程式編譯時,就會對變數分配記憶體單元,分配時按變數型別分配大小。經過編...

C語言中的指標

隨著程式語言的越來越多,但c語言在程式語言中的地位似乎始終沒有改變,其中得益於c語言中的指標,可以直接去操作記憶體位址與暫存器,執行效率也高,在嵌入式領域運用得尤其廣泛。對於初學者來說指標是c語言中很難翻越的一座大山,指標的掌握程度直接關係到c語言的掌握程度,其實指標並不是那麼高不可攀,只是紙老虎而...

C語言中的指標

指標是c語言中非常重要的東西,書本上寫了好多來解釋裡面的原理,當年老師也跟我們講了好多這方面的東西,一直就是感覺沒有聽明白。直到我看到了指向指標的指標,我建立了自己的理解,不知道是否正確,但是基本能解決遇到的問題。int p p i p。type p,宣告指標變數,type 例如int 告訴計算機p...