如果一開始就宣告陣列的大小,沒用那麼多的話就浪費,由其在embedded system下記憶體可是很寶貴的,大大影響了產品的成本價值。
宣告動態陣列
資料型態 *ptr;
ptr = (資料型態*)malloc(sizeof(資料型態)*cnt);
例如:
double *ptr;
ptr = (double*)malloc(sizeof(double)*cnt);
配置完後,和一般陣列的存取方式都一樣,可以用 *(ptr+i); 也可以用 ptr[i] 方式進行存取。
釋放記憶体
free(ptr)
程式使用範例
// ====================================
// FileName: Ptr1Dim_C.cpp
// Author : Edison.Shih.
// Complier: VC 2008
#include <stdio.h>
#include <stdlib.h>
// ====================================
// main function
int main(int argc, char**argv)
{
double *ptr = NULL;
int Dim = 0, i=0;
printf("please input Dim:");
scanf_s("%d", &Dim);
// malloc the memory address
ptr = (double*)malloc(sizeof(double)*Dim);
// set the value - method 1
for(i=0; i<Dim; i++) *(ptr+i) = (double)(i*i);
// show the value - method 2
for(i=0; i<Dim; i++) printf("ptr[%d] = %lf\n", i, ptr[i]);
printf("please input Dim again:");
scanf_s("%d", &Dim);
// before you malloc the new memory addree.
// free the old memory address first.
free(ptr);
ptr = (double*)malloc(sizeof(double)*Dim);
// set the value - method 1
for(i=0; i<Dim; i++) *(ptr+i) = (double)(i*i);
// show the value - method 2
for(i=0; i<Dim; i++) printf("ptr[%d] = %lf\n", i, ptr[i]);
free(ptr); // last, free the memory.
return 0;
}
執行結果
please input Dim:3
ptr[0] = 0.000000
ptr[1] = 1.000000
ptr[2] = 4.000000
please input Dim again:5
ptr[0] = 0.000000
ptr[1] = 1.000000
ptr[2] = 4.000000
ptr[3] = 9.000000
ptr[4] = 16.000000
沒有留言:
張貼留言