c語言指標學習筆記

2021-10-02 14:29:52 字數 1888 閱讀 8239

1.運算子 &

位址的大小是否與int相同取決於編譯器。32位是4位元組,64位是8位元組。

因此位址的輸出不能是%x, 應該是%p。

2.指標

int i;

int* p =

&i;int

* p,q;

int*p,q;

3.指標作函參

訪問這個位址上的變數需要使用到單目運算子*,接著可以通過指標使用和改寫這個變數。

int i =10;

f(&i);

voidf(

int*p)

最終k = 10, i = 11

4.指標的應用

場景一:函式需要返回多個值,某些只能通過指標返回。傳入的引數實際上是需要儲存帶回的結果的變數。如交換兩者的值:

int a =5;

int b =

6;

void

swap

(int

*pa,

int*pb)

場景二:分開返回。函式返回運算的狀態,結果通過指標返回。

5.指標中的常見錯誤

6.指標與陣列

inta[ ] <==>int* const a

inta[5], b[5];

a = b;

//這是不能實現的

7.指標與const

指標是const,表示指標一旦得到某個變數的位址後不能再指向其他變數。可以理解為不能再改變指標p的值,但可以改變*p的值。

int* const q = &i; // q是const

*q = 26; // ok

q++; // error

*p是const,表示不能通過這個去修改所指的變數。注意在這裡指標和指向變數都不是const。
const int *p = &i;

*p = 26; // error (*p是const)

i = 26; // ok

p = &j; // ok

int *const p1 = &i;

const int *p1 = &i;

int const *p1 = &i;

void f(const int *x)

這樣既能用較少的位元組數傳遞值給引數,又能避免函式對外面的變數的修改

8.指標運算

9.指標比較

10.指標的型別

11.動態記憶體分配

int

*a =

(int*)

malloc

(n*sizeof

(int

);

n為資料個數(陣列大小),這裡是以位元組為單位來分配空間的,a可以當做陣列來用。

標頭檔案#include

void* malloc(size_t size),因為返回型別為void*,所以要加上相應的型別強制轉換。

申請的空間是以位元組為單位的。

在申請完空間之後要釋放。

free (a)

;

把申請的空間還給系統,與malloc一起使用。

只能還申請來的空間的首位址。

c語言指標學習筆記

example 1 int a,b,p,q p a p a p q b p p a 錯誤,因為p實際上是乙個位址,而a是乙個整型值 p q 錯誤,因為這句話的意思是 將位址q指向的單元的值賦給位址p。而實際上p是乙個位址,是不能存值得 p a 錯誤 注意,如果這樣定義了 p,那麼 p表示位址 指標 ...

C 語言指標學習筆記

前敘 原先對c語言的學習,對指標有恐懼感.當c語言學到一定的程度的時候,再學習指標有種水到渠成的感覺。對指標變數的定義包括三個內容 1 指標型別說明,即定義變數為乙個指標變數 2 指標變數名 3 變數值 指標 所指向的變數的資料型別 一般是這樣的 型別說明符 變數名 int p 這個小星星號 表示這...

C語言指標學習筆記

假設我們定義乙個指標p。那麼會經常使用到三個符號 1,p 2,p 3,p 我們知道,p是乙個指標變數的名字,表示此指標變數指向的記憶體位址,如果使用 p來輸出的話,它將是乙個16進製制數。而 p表示此指標指向的記憶體位址中存放的內容,一般是乙個和指標型別一致的變數或者常量。而我們知道,是取位址運算子...