c語言學習之基礎知識點介紹(十九) 記憶體操作函式

2022-02-12 02:31:10 字數 2851 閱讀 7970

一、malloc函式

/*

首先需要匯入標頭檔案 #include malloc

void* malloc(n);

n是位元組大小

開闢堆空間,開闢的位元組數以n為準

返回的是開闢空間的首位址

void*是萬能指標,也就是說你可以用任意型別的指標去指向

*///

malloc用法

int *p = malloc(sizeof(int

));

*p = 30;

printf(

"%p %d\n

",p,*p);//

0x100105490

char *pc = malloc(sizeof(char)*4

);

pc[0]= 'a'

;

pc[1] = 'b'

; pc[

2] = 'c'

;

pc[3] = '\0'

;

printf(

"%s\n

",pc);

char *pc = malloc(4

);

*pc = 'a'

; *(pc+1) = 'b'

;

*(pc+2) = 'c'

; *(pc+3) = '\0'

;

printf(

"%s\n

",pc);

char *pc = malloc(4

);

char *temp =pc;

*pc = 'a'

; pc++; //

自身+1

*pc = 'b'

;

pc++;

*pc = 'c'

; pc++;

*pc = '\0'

; printf(

"%s\n

",temp);

char *pc = malloc(1

);

*pc = 'h'

; printf(

"%c\n

",*pc);

二、calloc函式

//

calloc用法

int nums[3] = ;//

在棧區int *p = calloc(4, 3);//

在堆區 p[0] = 10

; p[

1] = 20;p[

2] = 30;

for (int i =0; i<3; i++)

int *p = calloc(4, 3);//

在堆區

*(p) = 10

; *(p+1) = 20

; *(p+2) = 30

;

for (int i =0; i<3; i++)

malloc和calloc的區別:

malloc不會初始化,會有垃圾值,calloc會初始化為0

char *pch = malloc(100

);

for (int i =0; i<100; i++)

printf(

"\n------------分割線-------------\n");

char *pch2 = calloc(1, 100

);

for (int i =0; i<100; i++)

三、realloc函式

/*

當自己手動開闢出來的空間不夠用了,這個時候我們需要去擴容,就得用到realloc這個函式。

realloc:

realloc(要擴容的空間首位址,操作後的位元組大小);

作用:把你傳入的空間進行擴容或者縮小,操作後的位元組大小以後面的引數為準。

注意:用realloc函式的時候最好再用指標變數接收一下返回值。

因為你擴容的時候,很可能是系統幫你在一塊新的足夠大的空間裡面進行擴容了,那樣空間首位址就發生改變了。

*///

realloc的使用

char *p = malloc(100

);

*p = "

的手機客戶端還是把空間分布的刷卡繳費多少部分科技的裝置房間號多少功夫空間都是給我看乙個";

//所以要重新接收一下

p = realloc(p, 1000);//

放大 p = realloc(p, 50);//

縮小

四、記憶體洩露

/*

記憶體洩露:

記憶體容量有限,然後如果你不及時**不要用的空間,而是一直開闢新的空間,那麼記憶體就會不夠用,就叫記憶體洩露(像水杯裝水一樣)。

**裡面:某塊空間一直佔據,沒被**就叫記憶體洩露。

**自己開闢的堆空間:

free:

free(要**的空間首位址);

野指標:指向的是已被**的空間的指標叫野指標。指向不可用的記憶體空間叫野指標。

防止野指標:

就是在**後,立即將指標變數置為null。

*/int *p = malloc(4);//

記憶體洩露

//因為沒有對p指向的堆空間進行**,所以就記憶體洩露

//那麼程式自己怎麼**??

free(p);

//此時p指向的空間首位址就被**了,此時p變為野指標

p = null; //

p指向的空間被**後,要立即把p置為null,防止野指標錯誤

C語言學習知識點(二)

1.一維陣列的定義格式為 型別說明符 陣列名 常量表示式 例如 int a 10 它表示定義了乙個整形陣列,陣列名為a,有10個元素。2.在定義陣列時,需要指定陣列中元素的個數,方括弧中的常量表示式用來表示元素的個數,即陣列長度。3.常量表示式中可以包括常量和符號常量,但不能包含變數。注意 c語言不...

C語言知識點(三) 基礎知識

防止該標頭檔案被重複引用 對於 include,編譯器從標準庫路徑開始搜尋 filename.h 對於 include filename.h 編譯器從使用者的工作路徑開始搜尋 filename.h 1 引用本身是變數的別名,對引用的操作就是對變數本身的操作 2 引用必須要被初始化,指標可以不被初始化...

c語言基礎知識點(一)

程式執行過程 1.編譯形成目標 2.鏈結鏈結函式庫,形成可執行的二進位制機器 3.執行在特定機器環境下執行c程式。注釋兩種方式的注釋 單行注釋 多行注釋 作用1.解釋說明 2.遮蔽 除錯 是臨時將某部分 注釋掉,注釋掉的內容不會編譯到程式中 commond 注釋快捷鍵 c語言 第三章 變數賦值是要注...