day17 - 動態內存的分配初步理解

 

  1.  
  2. 爲什麼需要動態內存分配?  
  3. 1.動態內存很好的解決了傳統數組的缺陷  
  4. 2.傳統數組也叫做靜態的數組  
  5.  
  6.  
  7. 動態構造一維數組的方法一:  
  8. #include <stdio.h>  
  9. #include <malloc.h>  
  10. int main(void)  
  11. {  
  12.     //靜態的   
  13.     int a[5] = {1,2,3,4,5};  // *a[0]   ==a  
  14. //  printf("%d\n",a[2]);  
  15.       
  16.     int len = 5;  
  17.     //動態數組   
  18.     int *p = (int *)malloc(sizeof(int) *len);   
  19.     int i = 0;  
  20.     for(i=0;i<len;i++)  
  21.     {  
  22.         scanf("%d",p+i);  
  23.     }  
  24.     printf("輸出後的結果:\n");  
  25.     for(i=0;i<len;i++)  
  26.     {  
  27.         printf("%d,",*(p+i));  
  28.     }  
  29.     free(p);  
  30.       
  31.     return 0;  
  32. }  
  33.  
  34. 方法二:  
  35. #include <stdio.h>  
  36. #include <malloc.h>  
  37. int main(void)  
  38. {  
  39.     int len = 6;  
  40.     int *p  =(int *) malloc(sizeof(int)*len);  //一維數組。   
  41.     int i = 0;  
  42.     for(i=0;i<len;i++)  
  43.     {  
  44.         scanf("%d",&p[i]);  
  45.     }  
  46.     for(i=0;i<len;i++)  
  47.     {  
  48.         printf("%d,",p[i]);   
  49.     }  
  50.     free(p);  
  51.     return 0;  
  52. }  
  53.  
  54.  
  55. 動態內存和靜態內存的比較:  
  56. 靜態內存是由系統自動分配的,由系統自動釋放.  
  57. 靜態內存存儲在棧內存中  
  58.  
  59. 動態內存是由程序員自動分配的,手動釋放  
  60. 動態內存是堆分配的。  
  61.  
  62.  
  63. 多重指針的區別:  
  64.  
  65.  
  66. #include <stdio.h>  
  67.  
  68. void show(int ***q)  
  69. {  
  70.     ***q = 22;   
  71. }   
  72. int main(void)  
  73. {  
  74.     int i  = 10;  
  75.     int *a = &i;//把i變量的地址存儲在指針變量a中   
  76.     int **b = &a;  // 把a的內存地址存儲在b指針中.但是呢. 因爲a是*a類型的.所以我們在保存的時候要寫成**b   
  77.     //意思: 指針的指針   
  78.     show(&b);  
  79.     printf("%d\n",i);  
  80.     return 0;  
  81. }  
  82.  
  83. /*  
  84. 多重指針區別:  
  85.  
  86. 我可以通過b來直接修改i的值嗎   
  87.    
  88. */ 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章