標籤:android c style class blog code
*含義
1.乘法 3*5 2.定義指標變數 int * p;//定義了一個名字叫p的變數,能夠存放int資料類型的地址3.指標運算子, //如果p是一個已經定義好的指標變數則*p表示以p的內容為地址的變數
列印資料類型
%d - int%ld – long int%c - char%f - float%lf – double%x – 十六進位輸出 int或者long int或者short int%o - 八進位輸出%s – 字串
3、指標
指標就是地址. 熱身小程式 介紹指標int * p; //p是變數的名字, int * 表示p變數的資料類型是存放int類型的地址的資料類型//int * p; 不表示定義了一個名字叫做*p的變數// int * p; 應該這樣理解: p是變數名, int *是資料類型 ,p變數的資料類型是int*//所謂int * 類型 實際就是存放int變數地址的類型 int i = 3;p = &i;/*1. p儲存了i的地址, 因此p指向i 2. p不是i,i也不是p,修改p的值不影響i的值,修改i的值也不會影響p的值 3. 如果一個指標變數指向了某個普通變數, 則 *指標變數 就完全等同於 普通變數 例子: 如果p是個指標變數,並且p存放了普通變數i的地址則p指向了普通變數i
*p 就完全等同於 i 在所有出現*p的地方都可以替換成i 在所有出現i的地方都可以替換成*p *p 就是以p的內容為地址的變數*/j = *p; //等價於 j = i;printf("i = %d, j = %d\n", i, j);
4、指標與數組
數組名,下標和指標的關係,指標變數的運算數組名int a[5] //a是數組名,5是數組的大小,元素個數int a[3][4] // 3行4列 a[0][0]就是數組的第一個元素Int b[5]A=b ;//錯誤一維數組名是個指標常量,它存放的是一維數組第一個元素的地址int a[5];int a[3][4];printf("%#X\n",&a[0]);printf("%#X\n",&a);下標和指標的關係如果p是個指標變數 則p[i] 等價於 *(p+i)
5、動態分配記憶體
動態記憶體分配問題 傳統數組的缺點 1.數組長度必須實現指定, 並且只能是常整數. int a[5]; int len; int a[len];//error 2.傳統形式的數組,程式員沒法手動釋放空間 數組一旦定義,系統為該數組分配的空間一直存在 函數運行完畢,數組的空間就被釋放 3.數組的長度不能在函數運行中動態增加或者縮小 4.A函數定義的數組只有在A沒執行完畢前被使用,a函數運行完畢後,a的數組就無法被其他函數使用
# include <stdio.h># include <malloc.h> //不能省 malloc 是 memory(記憶體) allocate(分配)的縮寫int main(void){ int i = 5; //分配了4個位元組 靜態分配 11 行 int * p = (int *)malloc(4); //12行 /* 1. 要使用malloc函數,必須添加malloc.h這個標頭檔 2. malloc函數只有一個形參,並且形參是整型 3. 4表示請求系統為本程式分配4個位元組 4. malloc函數只能返回第一個位元組的地址 5. 12行分配了8個位元組, p變數佔4個位元組, p所指向的記憶體也佔4個位元組 6. p本身所佔的記憶體是靜態分配的, p所指向的記憶體是動態分配的 */ *p = 5; //*p 代表的就是一個int變數, 只不過*p這個整型變數的記憶體配置方式和11行的i變數的分配方式不同 free(p); //freep(p)表示把p所指向的記憶體給釋放掉 p本身的記憶體是靜態,不能由程式員手動釋放,p本身的記憶體只能在p變數所在的函數運行終止時由系統自動釋放 printf("大家好!\n"); return 0;}
6、函數指標
1.定義int (*pf)(int x, int y);2.賦值 pf = add;3.引用 pf(3,5);