2019年3月12日 星期二

C++ struct 延伸(靜態記憶體 & 動態記憶體)

以下是靜態記憶體 & 動態記憶體的使用

靜態記憶體是由工程師自行定義Array的大小

動態記憶體則是將Array的大小設置成指標
讓工程師可以自行變更


1. 靜態記憶體:
#include <iostream>
#include <string.h>
#include "S0905.h"
using namespace std;

/* 費氏數列 */
#define MaxLenth 8

struct IntArray
{
int size;
int data[MaxLenth];
};

void IntArray_Init(IntArray & array)
{
array.size = MaxLenth;
for(int i = 0; i < array.size; i ++)
array.data[i] = 0 ;
}

void IntArray_output(const IntArray array)
{
for(int i = 0; i < array.size; i ++)
cout << array.data[i]<< " ";
cout << endl;
}

void ToFibonacci(IntArray & array)
{
array.data[0] = 0;
array.data[1] = 1;
for(int i = 2; i < array.size; i ++)
array.data[i] = array.data[i-2] + array.data[i-1];
}

void S0905(void) {
IntArray A, B;
A.data[0] = 99;
IntArray_Init(A);
ToFibonacci(A);
B = A;

IntArray_output(B);
}



2. 動態記憶體:
#include <iostream>
#include <string.h>

using namespace std;

/* 費氏數列 */
#define MaxLenth 8

struct IntArray
{
int size;
int * data;
};

void IntArray_Init(IntArray & array, int size)
{
array.size = size;
array.data = new int[size] ;

for(int i = 0; i < array.size; i ++)
array.data[i] = 0;
}

void IntArray_Delete(IntArray  & array)
{
array.size = 0;
if(array.data != NULL)
{
delete[] array.data ;
array.data = NULL;
}

}

void IntArray_output(const IntArray & array)
{
for(int i = 0; i < array.size; i ++)
cout << array.data[i]<< " ";
cout << endl;
}

void ToFibonacci(IntArray & array)
{
array.data[0] = 0;
array.data[1] = 1;
for(int i = 2; i < array.size; i ++)
array.data[i] = array.data[i-2] + array.data[i-1];
}

void S0906(void) {
IntArray A, B;

IntArray_Init(A, 12);
ToFibonacci(A);
B = A;

IntArray_output(B);
}

沒有留言:

張貼留言

Android Studio IDE 錯誤

 :app:compile xxxxx JavaWithJavac FAILED An exception has occurred in the compiler (1.8.0_312). Please file a bug against the Java compiler ...