指標知識體系搭建

2021-08-14 04:38:05 字數 2955 閱讀 6035

先從整體上把握指標的知識體系。然後突破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元件的動畫內容,當乙個 所有功能全部搞定之後,就該使用到該單元內容,...