C語言學習第十課 指標中級

2021-10-18 16:08:23 字數 3308 閱讀 2873

1,指標運算

算術運算:指標是乙個用數值表示的位址。可以進行四種算術運算:++--+

-//指標的每一次遞增,它就會指向下乙個元素的儲存單元

//指標的每一次遞減,它就會指向前乙個元素的儲存單元

//指標在遞增和遞減時,跳躍的位元組數(步長),取決於指標所指向變數資料型別長度。

關係運算:指標可以用關係運算子進行比較,如:==

<

>

【注意:如果p1和p2指向兩個相關的變數,比如在同乙個陣列,則可對p1和p2比較大小】

//對相關變數的指標進行比較,才有意義

//大於小於常用於陣列,全等一般用於判斷指標是否為null

2,動態記憶體分配
動態記憶體:指在堆空間分配記憶體【注意:靜態記憶體指的是在棧空間分配記憶體】

//區域性變數、形參是在棧上分配的,自動申請和釋放//動態記憶體需要自己手動分配和釋放

動態記憶體分配的意義:

//c語言中的一切操作都是基於記憶體的

//變數和陣列都是記憶體的別名

//定義陣列時,必須指定陣列的大小,使用動態記憶體分配可以在執行時調整大小

//函式結束之後,不希望變數的記憶體被釋放

3,動態記憶體分配方法
【注意:不要改變動態記憶體分配了的指標的指向】

1,首先包含stdlib.h標頭檔案

2,使用函式

·malloc void

*malloc

(size_t _size)

;//功能:在堆區申請大小為size位元組的連續記憶體【注意:不會對記憶體進行初始化】

例子: #include

#include

#include

//包含memset函式

intmain()

memset

(pn,0,

sizeof

(int)*

5);//將動態記憶體分配的空間全部初始化為0..

.free

(pn)

; pn=

null;}

·calloc void

*calloc

(size_t _count,size_t _size)

;//功能:和malloc相同,申請count個大小為size的連續記憶體,【並把記憶體全部初始化為0】

例子: #include

#include

intmain()

...free

(pn)

; pn=

null;}

·realloc void

*realloc

(void

* _black,size_t _size)

;//功能:把用以上兩個函式申請的記憶體(_black指向的),重新申請大小(size);

//如果size大於原記憶體的大小,則新分配的記憶體不會初始化;如果size小於原記憶體大小,會導致資料丟失

例子: #include

#include

#include

//包含memset函式

intmain()

memset

(pn,0,

sizeof

(int)*

5);//將動態記憶體分配的空間全部初始化為0

//如果還需新增記憶體if(

!realloc

(pn,

sizeof

(int)*

6))*

(pn +5)

=3;//給新分配的記憶體初始化..

.free

(pn)

; pn=

null;}

·free void

free

(void

* _block)

;//功能:釋放malloc、calloc或realloc申請的記憶體。如果傳遞的引數是乙個空指標,則不會執行任何操作

注意事項:

//申請之後一定要記得釋放,否則會導致記憶體洩漏

//不要重複釋放同一記憶體

//釋放之後。一般會把指標置為null(可以避免釋放後誤用)

3,memset void

*memset

(void

* _dst,

int _val,size_t _size)

;//功能:作用是在一段記憶體塊中填充val這個值//常用來清零操作

//引數:dst表示要初始化的記憶體;val表示對每個位元組填充的值;size表示總共初始化多少個位元組數

4,memcpy void

*memcpy

(void

* _dst,

void

const

* _src,size_t _size)

;//功能:和strcpy類似,memcpy用於記憶體拷貝,size表示要拷貝的位元組數

4,大端模式和小端模式

大端和小端:表示資料在儲存器中的存放順序;

高位0x12345678

低位//該儲存模式類似於把資料當作字串處理:位址由小向大增加,資料從高位往低位存放

大端模式圖:

大端模式:

低位址12

3456

78高位址

//該模式將位址的高低和資料位權有效結合,高位址部分權值高,低位址部分權值低

小端模式圖:

小端模式:

低位址78

5634

12高位址

5,typedef

1

,typedef是給型別取別名

2,定義:

typedef 型別 別名;

//typedef int int;int就是我們定義的新型別名

//typedef int(*parr)[5];parr就是定義的陣列指標型別

//typedef void(*pfuna)(int a);

6,陣列指標
定義方式:

資料型別 (

*變數名)

[size]

;//是乙個指標,指向乙個陣列

7,指標陣列
定義方式:

資料型別* 變數名[size]

;//陣列裡存的都是指標

8,二維陣列指標
1,最大儲存單元:乙個指向一維陣列的指標

例子:int a[2]

[3]=

;int

(*p)[3

]=a;

10,指標函式
指標函式:返回值為指標型別的函式;

注意://不要返回臨時變數的位址

第十課學習

按鍵在未按下時,處於一種高電平狀態,一般這種情況下,其對io口的電平一致,則不會產生任何效果,只有在按下狀態時,由於與接地的迴路貫通,故相當於微控制器的io口直接接地。從原理圖上看,之所以要接keyin1 keyin4外接至按鍵中,主要原因是為了獲取按鍵的狀態,因為我們只能獲取微控制器的io口狀態,...

R語言學習 第十課 相關分析

1.相關係數的估計和檢驗 相關係數作為隨機變數之間相關程度的度量指標,能刻畫線性關係的相關程度 對於二維隨機變數,相關係數的乙個矩估計,也是樣本相關係數為 計算檢驗的統計量 x y n 按照公式設定分子 numerator 按照公式設定分母 denominator 計算出相關係數r r r 1 0....

第十課 邊框

無邊框 border style none 虛線邊框 border style dotted 虛線邊框 border style dashed 實線邊框 border style solid 雙邊框 border style double 凹槽邊框 border style groove 壟狀邊框 ...