- 爲什麼需要動態內存分配?
- 1.動態內存很好的解決了傳統數組的缺陷
- 2.傳統數組也叫做靜態的數組
- 動態構造一維數組的方法一:
- #include <stdio.h>
- #include <malloc.h>
- int main(void)
- {
- //靜態的
- int a[5] = {1,2,3,4,5}; // *a[0] ==a
- // printf("%d\n",a[2]);
- int len = 5;
- //動態數組
- int *p = (int *)malloc(sizeof(int) *len);
- int i = 0;
- for(i=0;i<len;i++)
- {
- scanf("%d",p+i);
- }
- printf("輸出後的結果:\n");
- for(i=0;i<len;i++)
- {
- printf("%d,",*(p+i));
- }
- free(p);
- return 0;
- }
- 方法二:
- #include <stdio.h>
- #include <malloc.h>
- int main(void)
- {
- int len = 6;
- int *p =(int *) malloc(sizeof(int)*len); //一維數組。
- int i = 0;
- for(i=0;i<len;i++)
- {
- scanf("%d",&p[i]);
- }
- for(i=0;i<len;i++)
- {
- printf("%d,",p[i]);
- }
- free(p);
- return 0;
- }
- 動態內存和靜態內存的比較:
- 靜態內存是由系統自動分配的,由系統自動釋放.
- 靜態內存存儲在棧內存中
- 動態內存是由程序員自動分配的,手動釋放
- 動態內存是堆分配的。
- 多重指針的區別:
- #include <stdio.h>
- void show(int ***q)
- {
- ***q = 22;
- }
- int main(void)
- {
- int i = 10;
- int *a = &i;//把i變量的地址存儲在指針變量a中
- int **b = &a; // 把a的內存地址存儲在b指針中.但是呢. 因爲a是*a類型的.所以我們在保存的時候要寫成**b
- //意思: 指針的指針
- show(&b);
- printf("%d\n",i);
- return 0;
- }
- /*
- 多重指針區別:
- 我可以通過b來直接修改i的值嗎
- */