先從整體上把握指標的知識體系。然後突破1級指標、二級指標、多級指標。
指標也是一種變數,占有記憶體空間,用來儲存記憶體位址。
測試指標變數占有記憶體空間大小
*p操作記憶體
指標變數和它指向的記憶體塊是兩個不同的概念
指標是一種資料型別,是指它指向的記憶體空間的資料型別
結論:指標的步長,根據所指記憶體空間型別來定。
注意:建立指標指向誰,就把把誰的位址賦值給指標。圖和**和二為一。
不斷的給指標變數賦值,就是不斷的改變指標變數(和所指向記憶體空間沒有任何關係)。
void main()
int main()
兩碼事:指標變數和它指向的記憶體塊變數
定義2個變數(通常乙個實參,乙個形參)
建立關係,實參取位址賦給形參指標
*p形參去間接修改實參的值
三個條件的組合,分別產生三種很重要的語法現象
在函式呼叫的時候
實驗1:1級指標
int getfilelen(int* p)
int main()
實驗2:2級指標間接修改一級指標的值int getmem(char** p2)
int getmem2(char* p2)
int main()
這裡getmem2()用的是1級指標,看上去執行也可以通過,但關鍵是用二級指標可以訪問一級指標指向的值,如:
void getmem(char** p2)
int main()
實驗4:int getmem(char** myp1, int* mylen1, char** myp2, int* mylen2)
int main()
printf("p1:%s\n", p1);
printf("p2:%s\n", p2);
if ( null != p1 )
if ( null != p2 )
return ret;
}
實驗5:間接賦值的應用場景void main()
; char* p1 = from;
char* p2 = to;
strcpy(from, "1234345tgdsf");
while('\0' != *p1)
//1 2寫在一塊,3單獨寫在另乙個函式裡面 ==》函式呼叫
//見上乙個實驗
//1單獨寫,2 3寫在一塊 ==》c++會用
}
主調函式 被調函式
記憶體分配方式
實驗1:二級指標做輸出
//兩種返回介面方法
int getmem(char** myp1)
char* getmem2(int num)
int main()
p1 = getmem2(100); //分配100個位元組
printf("p1:%s\n", p1);
if ( null != p1 )
return ret;
}
在被呼叫函式中分配記憶體,把分配的記憶體介面返回給主調函式。
在呼叫完成後要釋放記憶體。
理解:
主調函式還是被呼叫函式分配記憶體
被呼叫函式是在heap/stack上分配記憶體
二級指標做輸入
int main(int arc ,char *arg); 字串陣列
int shoumatrix(int [3][4], int iline);
二級指標做輸出
int demo64_getteacher(teacher **ppteacher);
int demo65_getteacher_free(teacher **ppteacher);
int getdata(char **data, int *datalen);
int getdata_free(void *data);
int getdata_free2(void **data); //避免野指標
理解 主調函式還是被呼叫函式分配記憶體
被呼叫函式是在heap/stack上分配記憶體
**指標做輸出
int getfileallline(char ***content, int *pline);
int getfileallline_free(char ***content, int *pline);
理解 主調函式還是被呼叫函式分配記憶體
被呼叫函式是在heap/stack上分配記憶體
1)野指標 2種free形式
int getdata(char **data, int *datalen);
int getdata_free(void *data);
int getdata_free2(void **data);
2)2次呼叫
主調函式第一次呼叫被呼叫函式求長度;根據長度,分配記憶體,呼叫被呼叫函式。
3)返回值char /int/char *
4)c程式書寫結構
商業軟體,每乙個出錯的地方都要有日誌,日誌級別
tags: 指標
canvas知識體系
把canvas想象成乙個畫板 乙個繪製狀態,可模擬畫圖工具中的工具欄 繪圖元素,包括簡單的圖形,線條,複雜的組合,和 繪製模式,比如畫板中的圖形存在繪製的先後順序,而存在重疊部分,該如何顯示存在重疊的圖形,這是繪製模式要解決的問題 裁切路徑,只讓畫板的部分可見 畫素操作,操作imagedata的畫素...
android 知識體系
1.雙鎖單例,為什麼要加 volatile?volatile就牽扯到指令重排序的問題了。要理解為什麼要加volatile,首先要理解new singleton 做了什麼。new乙個物件有幾個步驟。1.看class物件是否載入,如果沒有就先載入class物件,2.分配記憶體空間,初始化例項,3.呼叫建...
Vue 知識體系
由vue官網可知,vue大致分為如下目錄 基礎在基礎中,簡單的介紹了vue在本地記事本方式開發的整個過程,學過該內容,可以通過記事本簡單的進行開發,但是僅限於單個頁面之間,且均為簡單的使用。過渡 動畫 在該單元中,詳細的講述了vue元件的動畫內容,當乙個 所有功能全部搞定之後,就該使用到該單元內容,...