C語言 二 指標

2021-06-28 14:16:47 字數 2327 閱讀 9242

一、指標概述

1.簡介

2.初始化

1)先定義後初始化

int a =10;

int  *p;

p=&a;

2)定義並初始化

int a=10;

int *p =&a;

備註:在資料型別後,變數名稱前的」*「是乙個說明符,用來說明該變數是乙個指標變數。

如果前面沒有資料型別,如:*p,這裡的」*「是乙個指標運算子,用來取出指標變數所指向的變數。

3.指標變數的占用記憶體

在同一編譯器環境下,所占用的記憶體是固定的,與指標變數的型別無關。

不同的編譯器,指標變數的占用記憶體不同。

16位編譯器->2位元組,32位編譯器->4位元組 ,64位編譯器->8位元組

二、指標與陣列

1.p是指標,a是陣列

1)如果p指向了乙個陣列元素,則p+1始終表示指向陣列該元素的下乙個元素。與編譯器環境無關、與指向的資料型別無關。

例如:p=&a[2], p+1=&a[3]

2)對於不同型別的陣列元素,p值的改變是不同的。如果陣列元素為int型,p+1代表p的值加上2(在16位編譯器環境下),不管p+1的值是多少,它始終保證剛好指向下乙個元素。

2.假設p的初始值是&a[0],那麼:

1)p+i和a+i,都可以表示元素a[i]的位址。它們都指向陣列第i個元素的位址。

2)*(p+i)和*(a+i),都表示陣列元素a[i].

3)雖然p+i和a+i都指向陣列的第i個元素,但是二者還是有區別的。作為指標變數的p是可以改變自身的值,如p++。但是a是乙個代表陣列首位址的常量,同時也是乙個陣列的名字,它的值是不能改變的,即a++不合法。

3.用陣列名作為函式實參時,實際上是把陣列的首位址傳遞給形引數組,兩個陣列公用同一段記憶體空間。

4.在很多情況下,指標和陣列是可以相互切換使用的,但並不能說指標就是陣列。

5.例子

#include #include int main() ;

// 定義乙個int型別的指標,並指向陣列的第0個元素

int *p = a;

int i;

for (i = 0; i < 4; i++)

return 0;

}

三、指標與字串

1.字串可以看做乙個特殊的字元陣列,自然也就是乙個陣列。之所以特殊,是因為,它會在陣列的末尾自動新增"\0",表示結尾。

2.指標和字串的使用

#include int main()

3.遍歷字串

char a="china";

char *p=a;

for(;*p !='\0';p++)

//輸出結果:china

四、指標與函式

1.回顧一下

int *p=12;

p儲存的是位址。

*p是取出記憶體位址的值。

p+1,下乙個位址

*(p+1),下乙個位址的值

2.返回指標的函式

char * upper(char *str) 

// 遍歷下乙個字元

}// 返回字串

return dest;

}

3.指向函式的指標

為什麼指標可以指向函式?

函式作為一段程式,在記憶體中也要佔據部分儲存空間,他也有乙個起始位址,即函式的入口位址。既然函式有位址,指標變數就是用來儲存位址的,因此,指標可以指向乙個函式,函式名就是函式的位址。

4.例子

1)宣告和初始化

#include #include int sum(int a, int b) 

int main()

2)實際應用

#include #include #include // 減法運算

int minus(int a, int b)

// 加法運算

int sum(int a, int b)

//乘法運算

int mul(int a, int b)

// 這個counting函式是用來做a和b之間的計算,至於做加法還是減法運算,由函式的第1個引數決定

void counting(int (*p)(int, int), int a, int b)

int main()

C語言認識(二)指標

指標 int main p認為是一級指標 p存的是a的位址 指標又稱為間接訪問符。typedef查詢一下。基本變數可以進行混合運算。混合型別 陣列 指標等 基本型別不能和混合型別進行運算。無論是 int p 還是 char p1 double p2 指標的大小是固定的,由cpu大小決定。32bit電...

c語言基礎(二)指標篇

定義乙個int型別的變數i int i 10 定義乙個int型別的一級指標變數 int p 把i對應的位址賦給p變數 p i 指標取值 p 把p變數對應的位址的值取出來 printf p d p 首先我們定義的指標變數p,其實p就是用來存放位址的,我們把i的位址賦給p,那麼p的值其實就是i的位址,p...

c 學習筆記(二) 指標

int balance 5 int ptr ptr balance ptr是指向陣列balance的指標 或者這樣也是可以的 ptr balance balance和ptr的區別是ptr是變數,balance是常量 ptr 1 這是可以的 ptr balance 這是不可以的,ide會報錯說表示式必...