
00 包目前CLion的最新版本還不支持中文需要導入#include stdlib.h 再在main函數內寫system(chcp 65001);才能在代碼中用中文stdlib 還可以提供動態(tài)內存分布——malloc函數01 使用原因對于函數在函數外定義的變量函數內進行的運算不會影響函數外變量大小定義 int bn; b 改變時n不會改變?yōu)榱俗尭淖兺瑫r發(fā)生我們需要指針02 定義格式指針: 也是一種定義變量的方式指針變量被用來存儲另一個變量的地址通過地址來操作數據格式 你要存儲的變量地址的類型 *指針變量名;//取地址變量名//int m 10; 定義了一個整數型指針 它可以存儲一個整數型變量的內存地址int *pm m;03 語法01 改變值指針操作 如何通過指針變量操作它存儲的地址中的數據 *指針變量 值; *a; 錯誤 *a*a1; 正確 定義指針變量 int *pmm; 函數void add(int *a){ *a*a1;} int n0; add(n); 02 不同的輸出結果輸出變量名輸出*指針變量名變量值輸出變量名輸出指針變量名指針變量數據存儲的地址編碼變量內存地址04 與數組結合01 相關知識**計算機操作的基本單位是byte**數組的儲存地址是連續(xù)的間隔由變量單位大小決定如int間隔4char間隔1輸出 *數組變量名數組第0號變量值 輸出 *數組變量名i數組第i號變量值輸出 數組變量名輸出 數組變量名 輸出數組變量名[0]數組第一個變量的儲存地址數組變量名 也相當于一個指針因此通用一些操作C語言的函數 不支持直接返回數組 int[] test(){}不合法解決方法 可以使用指針來存儲數組的地址 進行返回返回值為指針時寫 int* 02 試錯int* createArray(int n) { //創(chuàng)建函數返回值為int指針參數為一個int變量 int arr[n]{0,10,20}; //創(chuàng)建數組arr // for(int i0;i10;i) { // printf(%d\n,arr[i]); // } return arr; //返回值為指針int* arr } int main() { int* parrcreateArray(10); //創(chuàng)建指針 int*parr數組存儲地址 for(int i0;i10;i) { printf(%d\n,parr[i]);//輸出數組存儲的數據 } }結果無論是本代碼還是輸出*parr都會導致崩潰注釋化的輸出數組元素仍然可以正常運行可以CLion和DEV C一起用找錯原因是變量的生命周期有界性定義一個變量之后 它在什么時候會消失 在該變量定義的大括號范圍之外就不能使用了arr是函數內定義的變量函數外無法調用03 解決方式 動態(tài)數組使用內存分配函數相當于在內存中分配一塊空間用于儲存數據不會因有界性而失效格式數據類型 *數組名(數據類型*)malloc(內存大小);注意內存單位為byte因此對不同類型的數據需要分配不同大小的內存例如 int n; malloc(n*4);int* createArray(int n) { int *arr (int*) malloc(n*4); // arr 是一個指針存儲的是一整塊內存空間的首地址 指針相當于數組 // 使用內存分配函數分配一塊內存(長n*4)給一個指針充當一個數組 for (int i0;i5;i) { *(arri)i*5; //進行了初始化非必要 } //arr[i]i*5; 也可數組指針通用操作 return arr; } int main() { int* parrcreateArray(10); //把創(chuàng)建的指針*arr的地址賦值給*parr for(int i0;i10;i) { //指針數組通用操作 printf(%d\n,parr[i]); //*(parri)也可 } }04 擴展 字符串字符串也是一種數組因此支持通用操作char name[10];scanf(%s,name[0]);scanf(%s,name);scanf(%s,name); //三者作用相同char *cp (char*) malloc(10);scanf(%s,cp); //與指針結合