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...