sizeof運算符、malloc函數及free函數


一、sizeof運算符的用法

1.sizeof運算符給出某個類型或變量在內存中所占據的字節數。

int a;  sizeof(a)=4;  //sizeof(int)=4;

double b;  sizeof(b)=8;  //sizeof(double)=8;

2.數組的sizeof值等於數組所占用的內存總字節數。

如:char a[] = "yes";  sizeof(a);  // 結果為4,字符末尾還存在一個NULL終止符

     int a[3];  sizeof(a);  // 結果為3*4=12,3個int類型
在學數組和函數那塊是遇到的sizeof就是在求數組的長度:

int a = sizeof(a1) / sizeof(a1[0]); // 總長度/第一個元素的長度

3. 指針變量的sizeof值與指針所指的對象沒有任何關系,所有的指針變量所占內存大小相等。(不同的編譯器指針變量所占內存大小不同)

char *p = "abc";
int *q;
string *s;
sizeof( p ); // 結果為4
sizeof( q ); // 結果為4
sizeof( s ); // 結果為4

如果操作數是函數中的數組形參或函數類型的形參,sizeof給出其指針的大小。

void (*p)();// 函數指針

sizeof( p );// 結果為4

二、malloc函數(內存的動態分配)

1.malloc函數原型:

void *malloc(unsigned int size);

malloc向系統申請分配指定size個字節堆內存連續空間,返回類型是 void* 類型,void* 表示未確定類型的指針。在C語言中,void* 類型可以強制轉換為任何其它類型的指針。

p = malloc (sizeof(int)*n);//隱式類型轉換,分配n個整數內存空間
p = (int *) malloc (sizeof(int)*n);//顯式強制類型轉換,分配n個整數內存空間

函數返回值是所分配區域的第一個字節的地址,如果申請分配內存失敗,則返回空指針(NULL)。

2.申請了內存空間后,必須檢查是否分配成功。

q=(DLNode *)malloc(sizeof(DLNode));
if(!q) return OVERFLOW;

3.雖然malloc()函數的類型是(void *),任何類型的指針都可以轉換成(void *),但習慣上進行顯式強制類型轉換。

三、free函數的用法

1.free函數原型:

void free(void *p);//無返回值

free()函數釋放變量p所指向的動態內存空間,p應該是最近一次調用malloc函數時得到的函數返回值。

free( p );//釋放動態空間

2.當不需要再使用申請的內存時,一定要記得釋放,如果申請后不釋放就會造成內存泄漏。

3.malloc函數和free函數應該是配對使用的,且釋放只能一次。

 

最后,sizeof在后面的結構體和聯合體中用的會更深入一些,待學到那塊時再來補充總結。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM