2021年3月16日 星期二

動態陣列 in C

如果一開始就宣告陣列的大小,沒用那麼多的話就浪費,由其在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

沒有留言:

張貼留言