C語言malloc的用法及詳解


 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 void freem(int* p){
 4 #include <stdio.h>
 5 #include <stdlib.h>
 6 void update_value(int* p){
 7         *p = 100;
 8 }
 9 int main(){
10         int a=10;//在棧上面分配變量a 占4個字節        int *p = (int*)malloc(sizeof(int));//申請類型是int內存空間;占4個字節;p指針指向該4個字節的內存空間
11         //p變量也占4字節;所以sizeof(p)=8個字節
12         *p = 50;//賦值p只指向的動態空間為50
13         printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));
14         free(p);//修改p指向的內存中的數據
15         printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));
16         update_value(p);
17         printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a));      
18 
19         return 0;
20 }

int *p = (int *)malloc(sizeof(int))

malloc函數會返回開辟空間的首地址,加(int *)的目的是讓計算機知道,如何去划分這個開辟的空間,

因為char、int 、long這些類型的字節大小是不一樣的,我們知道了首地址,

還要知道是以幾個字節為單元。

所以,這句話一共開辟了8個字節(某些計算機上),這也是為什么我寫sizeof(int),而不是直接寫4的原因。

 


免責聲明!

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



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