1. 程式人生 > >動態記憶體分配舉例_動態一維陣列的構造

動態記憶體分配舉例_動態一維陣列的構造

# include <stdio.h>
# include <malloc.h>

void main(void)
{
int len,i, *p;
printf("輸入要存放元素的個數:");
scanf("%d", &len); //輸入長度構造動態一維陣列
p = (int *)malloc(sizeof(int)*5);
for(i=0; i<len; ++i)
scanf("%d",(p+i)); // p+i等同於&p[i];

// 將動態一維陣列p的長度增加至6,並將第6個元素賦值為100;

realloc(p,sizeof(int)*6);//realloc重新增加或減少一維陣列的長度;
p[5] = 99;
printf("輸出內容:\n");
for(i=0; i<=len; ++i)
printf("%-5d", p[i]); //p[i]等同於*(p+i);
printf("\n");


}

/*執行結果如下:
--------------------------
輸入要存放元素的個數:5
11 22 33 55 66
輸出內容:
11 22 33 55 66 99
--------------------------
*/

realloc(p,24) 意思是將原有記憶體空間改為24個位元組,如原來p = (int *)malloc(sizeof(int)*5)的記憶體空間為20個位元組,為p[5],這裡將增加了4個位元組,陣列長度相應的增加這p[6];組修改記憶體空間大小時,原先保留的資料不受影響。修改後的空間若大於原先長度則可以儲存更多的資料,小於原有長度剛丟失後面的陣列,如realloc(p,16),陣列長度降為p[4],後面丟失一個數據