C語言指標筆記

2021-08-04 03:09:48 字數 1603 閱讀 6887

1、指標本身也是乙個變數,儲存的是另乙個變數的位址

2、使用指標的好處:增加訪問資料的手段,使程式更加的靈活

3、所有的指標變數都是占用4個位元組(32位)

4、 訪問指標所指向的變數的兩種方式:

int a = 5;

int *p = &a;

printf("%d\n",a); //1.通過變數名直接訪問

printf("%d\n",*p);//2.通過指標『解引用』間接訪問

5、指標指向誰,解引用就是誰

int a = 5; int *p = &a;   *p *****== a

6、宣告指標的型別要和指標所指向的變數的型別保持一致

7、面試題

野指標與空指標的區別:

野指標是指標未被初始化的指標,指向不明確

空指標是初始化為null的指標,是0號位址單元

8、傳指標: 通過指標解引用間接改變實參所指向的變數的值

void exchange(int *x,int *y)

exchange(&a,&b);

9、函式返回乙個指標變數

int *smaller(int *px,int *py)

10、二級指標:指向指標的指標  

int a = 5;

int *p = &a;

int **q = &p;

11、陣列和指標:

int a[5];  //不使用指標就可以運算元組元素

(1) 陣列名是指向陣列首元素的  a == &a[0]

(2) 陣列名是陣列的首位址

(3) 陣列名是乙個符號常量,它不是真正意義上的指標變數

12、記憶體分配的兩種方式

(1)靜態記憶體分配 在編譯時分配  int a[5];

(2)動態記憶體分配 在執行時分配  malloc

13、c語言的五大記憶體區:

(1)棧區 

(2)堆區 

(3)全域性區/靜態區

(4)常量區   const關鍵字

(5)**區

14、 malloc > free  記憶體洩露

free > malloc  二次刪除 破壞記憶體

//在堆上分配一塊空間來儲存5個整型值,這5個值從鍵盤輸入

15、常量區指標

int * const p; //p不可變 *p可變

const int *p; //*p不可變 p可變

const修飾誰 誰不可

16、引用是另乙個變數的別名,引用本身不占用記憶體空間,引用必須在宣告時初始化。

17、變數的作用域

(1)檔案域   全域性變數

(2)函式域   函式的形參

(3)塊域     區域性變數

18、面試題: 區域性變數能否和全域性變數同名? 可以

19、如何引用其它檔案中定義過的全域性變數? extern

20、傳值返回編譯器會產生乙個臨時變數來接收返回值

21、不能返回指向區域性變數的指標或引用 

解決辦法:(1)將區域性變數改為靜態區域性變數 或(2)將區域性變數改為全域性變數

乙個指標指向乙個函式   獲取某乙個函式的位址  

void f(){}

函式名就是函式的位址   陣列名是陣列的首位址

c語言指標筆記

一 表示這是乙個指標變數,表示乙個變數的位址。二 與 的區別 int a p a 此處 p就是先執行 p,即去取p所指位址的值,相當於 p取出變數a,再進行取位址操作,p即取出a的位址,相當於 a.此處 a就是就是先計算 運算,即先取出a的位址,然後進行 運算,取出位址上的值,即變數a。三 一維陣列...

c語言指標筆記

指標是乙個變數,變數的值是記憶體位址。int a 10 指標型別為 int 指標指向型別 int 列印 a 會輸出10 列印 a 會輸出變數a所在的記憶體位址 列印 q 會輸出變數a的值的記憶體位址 列印 q 會輸出指標q指向的記憶體位址 int q a 指標型別為 int 指標指向型別 int 列...

c語言指標筆記

一.int a 20 1.陣列名代表陣列首元素的位址,不代表陣列的位址 2.對陣列名取位址代表整個陣列的位址.a和 a代表的資料型別不一樣 a代表陣列首元素的位址 a陣列型別 int 20 型別 陣列的型別由元素的型別和陣列大小共同決定 如 int array 5 的型別為int 5 陣列型別 ty...